首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于pointer,pointer,&pointer的疑问?你有木有?解决办法

2012-03-09 
关于pointer,*pointer,&pointer的疑问?你有木有?*pointer书上解释:pointer: 是指针变量,其内容是地址量。*p

关于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操作指向的变量

热点排行