c语言关于学指针刚开始的一个小问题

#include<stdio.h>intmian(){inta;int*b;b=&a;printf("%x",b);return0;}这个和下面那个差别在于上面这个声明定... #include<stdio.h>
int mian()
{
int a;
int *b;
b = &a;
printf("%x", b);
return 0;
}
这个和下面那个差别在于上面这个声明定义了一个指针变量……这两个本质区别在哪?是不是都可以输出a所在地址?(请无视有没有赋值赋值)

#include<stdio.h>
int mian()
{
int a;
int b;
b = &a;
printf("%x", b);
return 0;
}
展开
 我来答
百度网友e096309
2017-10-16 · TA获得超过1326个赞
知道小有建树答主
回答量:501
采纳率:96%
帮助的人:407万
展开全部
没啥区别。指针变量其实就是个整数(其实是无符号整数unsigned int,不过高位系统里可能已经是unsigned long long了),里面一般用来存地址罢了。

所谓地址,也就是内存的一个存储单元的编号,其实就是整数啦。

好比a变量的值存在了第123456个内存单元里,a的地址就是123456,b变量里存了123456这个值。

第一段代码可以通过*b取到a的值(第123456个内存单元里的值)。
所以对于第二段代码,同样也能通过 *((int*)b)取到a的值(也是第123456个内存单元里的值)。

至于(int*),因为int是四个字节的,就是说要一下子取4个字节,就是说明一下,在取*的时候,把123456, 123457, 123458, 123459这四个内存单元里的值拿出来拼成一个int。
追问
我可不可以这样理解……就是使用指针变量定义更方便了取值地址?
追答

其实取地址是一样的,可以看到你写的两个例子,取地址都是b=&a;

使用指针,变得方便了的是两方面吧:

  1. 根据指针取值。对于指针b,取值直接就是*b。对于整数b,取值得用*((int*)b)。

  2. 对于指针的移动。如果用一个int *p指向了一个int a[123]。在移动指针的时候,p++直接指向了下一个int的地址(其实地址增加了sizeof(int)==4,毕竟一个int占用四字节内存嘛)。如果用整数int np指向int a[123],得自己np+=(sizeof(int))。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式