c語言指針1
阿新 • • 發佈:2018-05-26
指針#include <stdio.h>
/*
2018-05-26
地址是內存單元的編號
指針就是地址,地址就是指針
地址就是內存單元的編號
指針變量是存放地址的變量
指針(0019FF38)和指針變量(p)是兩個不同的概念
但是要註意:通常我們敘述時會把指針變量簡述為指針,實際含義並不一樣
*/
int main(void)
{
int * p; // p是變量的名字,int *表示p變量存放的int類型變量的地址
// int *p 不表示定義了一個名字叫做*p的變量
// int *p 應該這樣理解:p是變量名,p變量的數據類型是int *類型
// 所謂int *類型實際就是存放int變量地址的類型
int i = 3;
int j;
p = &i; //ok
/*
1,p保存了i的地址,因此p指向i
2,p不是i,i也不是p,更準確的說,修改p的值不會影響i的值,修改i的值也不會影響p的值
3,如果一個指針變量指向了某個普通變量,則
*指針變量 就完全等同於 普通變量
例子:
如果p是個指針變量,並且p存放了普通變量i的地址
則p指向了普通變量i
*p 就完全等同於i
或者說:在所有出現*p的地方都可以替換成i
在所有出現i的地方都可以替換成*p
printf("%d\n",i); //輸出3
printf("%d\n",*p); //輸出3
*p 就是以p的內容為地址的變量
*/
j = *p;
printf("i = %d ,j = %d ,*p = %d \n",i,j,*p); //結果i = 3 ,j = 3 ,*p = 3
printf("i的地址是:%p\n",&i); //c語言中%p用來輸出指針類型自身的值。也就是說%p用來輸出地址
printf("j的地址是:%p\n",&j);
printf("p的地址是:%p\n",&p);
printf("p的值是:%p\n",p);
/*
輸出結果:
i = 3 ,j = 3 ,*p = 3
i的地址是:0019FF38
j的地址是:0019FF34
p的地址是:0019FF3C
p的值是:0019FF38
*/
return 0;
}
//變量i的地址是0019FF38,i的值是3
//變量p的地址是0019FF3C,p的值是0019FF38,即p的值就是i的地址
//*p 就是以p的內容為地址(即i的地址0019FF38)的變量,所以*p的值是3
//註意,你在運行的時候地址肯定不是這樣的,但是i的地址和p的值一定是一樣的
c語言指針1