关于pointer,*pointer,&pointer的疑问?你有木有?
*pointer
书上解释:
pointer: 是指针变量,其内容是地址量。
*pointer: 是指针变量所指向的变量,其内容是变量的值。
&pointer: 是指针变量本身所占据的存储地址。
///////////////////////查看下面代码///////////////////
#include <stdio.h>
int main()
{
char a = 'c';
char *p = &a;
printf("%d\n", p);
printf("%c\n", *p);
printf("%d\n", &p);
return 0;
}
运行结果:
1245052 (不同电脑地址不同)
C
1245048
我开始以为运行结果会是:
1245048
C
1245048
看了运行结果后:
p 和 &p 地址只相差4
于是我以为可能是变量的不同即地址相差也不同,
我将
char a = 'c'; 改成 int a = 10;
char *p = &a; 改成 int *p = &a;
运行结果依旧是:
1245052 (不同电脑地址不同)
C
1245048
这让我很糊涂,不清楚到底是为什么。。
到底pointer和&pointer的区别是啥? 地址量又是啥?
地址的偏移量跟类型没关么?
[解决办法]
不用钻相差4牛角尖.
p是指针类型的变量.他和a一样,都是变量.
p变量里面存的是a的地址.
&p得到的是p的地址.
[解决办法]
pointer
是指针存的地址
&pointer
是指针所在的地址
就像2在1的位置,但是2存的是3的的地址。而3的地址上存的是a!
[解决办法]
printf("%d\n",p) 将指针p所指向的地址(就是a变量的地址)打出来
printf("%d\n",&p)将指针p自身的地址打出来
所以两个应该是不同的,至于为何差4是因为变量a和p都在栈内
a分配完地址后,再分配p的地址(恰好是4个字节)所以向低位移动了4位
[解决办法]
比如,你在银行存了100块钱,银行保存了你的100块钱(的地址),但是银行的地址不一定就是那100块钱的地址;
可能银行保存了100块钱在另外一个地方的地址
[解决办法]
指针本身得有个自己的地址 &p
指针有其他变量指向了 才会有p被赋值(其他变量的地址)
才会有*p操作指向的变量