关于地址的理解
#include <stdio.h>int main()
{
int *p,*q;
int a={1,2};
p=&a;
q=p+1;
printf("%ld\n",p);
printf("%ld\n",q);
printf("%ld\n",q-p);
return 0;
}
输出第一行是
140734799804192
输出第二行是
140734799804196
输出第三行是
1
我一开始认为第三行输出的4,请问一下这是为什么? @人造人 @zealstar 先召唤大神
http://blog.sina.com.cn/s/blog_5fb3f12501016jiy.html
人造人 发表于 2017-4-8 17:05
http://blog.sina.com.cn/s/blog_5fb3f12501016jiy.html
你的博客? 超凡天赐 发表于 2017-4-8 19:24
你的博客?
不是 指针的加减运算是以指针指向的数据类型为基本单位的
既然 p=q+1,那么p-q == 1
至少C语言的创造者是这样来让逻辑合理的。{:10_245:} zealstar 发表于 2017-4-9 09:47
指针的加减运算是以指针指向的数据类型为基本单位的
既然 p=q+1,那么p-q == 1
可是为什么我用%d来打印p会警告,而用%d来打印p-q就不会警告,原谅我的钻牛角尖{:10_256:} zealstar 发表于 2017-4-9 09:47
指针的加减运算是以指针指向的数据类型为基本单位的
既然 p=q+1,那么p-q == 1
我先来自问自答一下,原因是p的量是一个地址值,在语法上不能用%d来打印。而p-q表示的就是个数,可以用%d 超凡天赐 发表于 2017-4-9 20:40
我先来自问自答一下,原因是p的量是一个地址值,在语法上不能用%d来打印。而p-q表示的就是个数,可以用%d
你这不是已经懂了么……{:10_277:},正解就是这样,别的语言也会这样处理。本来嘛,除汇编以外的语言都是为了方便人操作,不用手工计算地址和跨度问题,所以才这样编制的。 学习了,谢谢 @qq1242009750 @四十二 来领鱼币 超凡天赐 发表于 2017-4-14 10:51
@qq1242009750 @四十二 来领鱼币
来了 哎呀我来晚了~
看来您老人家应该已经解决了吧{:10_277:}
页:
[1]