C語言編程中的指針

單片機編程中,涉及指針的地方很多,需要多看多練習多總結。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
unsigned int pInt32;//指向32位無符號整數的指針
unsigned int UINT32_1;//32位的無符號整數
unsigned int Array1_UINT32[]={1,9,0,1};//存儲4個32位無符號整數的數組
unsigned short UINT16_1;//16位的無符號整數
unsigned char UINT8_1;//無符號的字符,8位的無符號整數
unsigned char UINT8_2[]={"VC++6.0"};//無符號的字符數組
UINT16_1=401;
UINT32_1=19;
pInt32=&UINT32_1;
printf("------\n");
printf( "
pInt32的指針地址:%x,存放的內容:%x,指向的內容:%d \n",&pInt32,pInt32,pInt32);
printf("------\n");
printf( "變量UINT32_1的地址:%x,內容:%%d\n",&UINT32_1,UINT32_1);
pInt32=Array1_UINT32;
printf( "
pInt32的指針地址:%x,存放的內容:%x,指向的內容:%d \n",&pInt32,pInt32,pInt32);
printf( "Array1_UINT32數組的地址:%x,內容:%d\n",&Array1_UINT32,Array1_UINT32[0]);
printf("--強制轉換--\n");
//pInt32=&UINT16_1;//不報錯
pInt32=(unsigned int)(&UINT16_1);
printf( "UINT16_1的地址:%x,內容:%d\n",&UINT16_1,UINT16_1);
printf( "
pInt32的指針地址:%x,存放的內容:%x,指向的內容:%d \n",&pInt32,pInt32,*pInt32);

return EXIT_SUCCESS;

}

結果輸出:

*pInt32的指針地址:12ff44,存放的內容:12ff40,指向的內容:19

變量UINT32_1的地址:12ff40,內容:%d
pInt32的指針地址:12ff44,存放的內容:12ff30,指向的內容:1
Array1_UINT32數組的地址:12ff30,內容:1
--強制轉換--
UINT16_1的地址:12ff2c,內容:401
pInt32的指針地址:12ff44,存放的內容:12ff2c,指向的內容:-859045487

總結:

1、unsigned int *pInt32;//指向32位無符號整數的指針

  pInt32=&UINT32_1;
  前面是定義一個指針,pInt32裏面放的是地址,地址指向的是具體的內容(值),而pInt32本身也有地址,它們都是可以改變的。

  是取值符號,pInt32表示取得它地址所指的值,&是得到地址的符號。

2、指針可以強制轉換,但類型最好一致,否則有可能出現不可預料的結果。

3、對於定義指針前面的修飾符號,按照從右向左來理解:
  const int p; //指針可改變,但是所指的內容不可以變=》p是指向整數常量的指針
  int
const p;//指針不可改變,但是所指的內容部可改變=》p是常量指針,指向整數
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章