求助一个关于指针地址的问题
今天想测试下在自己的编译环境里int是几个字节,写了如下代码:
#include<stdio.h>
int main()
{
int a[2] = {3,5};
printf("%d\n", &a[0]);
printf("%d\n", &a[1]);
printf("%d\n", &a[1] - &a[0]);
return 0;
}
运行结果为:1638208
1638212
1
这个地方为什么想减等于1呢?
然后我又改动了下,在第三个printf中加了2个long
#include<stdio.h>
int main()
{
int a[2] = {3,5};
printf("%d\n", &a[0]);
printf("%d\n", &a[1]);
printf("%d\n", (long)&a[1] - (long)&a[0]);
return 0;
}
运行结果:1638208
1638212
4
各位高手,问题1: 第一段代码分别输出来看差值明明是4,为什么相减不是4?
问题2: 为什么第二段代码加上long相减的结果为4了?
[解决办法]
问题1: 第一段代码分别输出来看差值明明是4,为什么相减不是4?
&a[1] - &a[0] == (int*)&a[1] - (int*)&a[0];
问题2: 为什么第二段代码加上long相减的结果为4了?
(long)&a[1] - (long)&a[0] == (char*)&a[1] - (char*)&a[0];
这样可以理解吗?
知道int* 想减 怎么求值吗?
知道char* 想减 怎么求值吗?
[解决办法]
问题1:是两个int*相减,那么得到的答案是以int为单位。那么a[1] - a[0],之间只差1个int,当然答案是1
问题2:你加了(long)后,就变成两个long相减,答案当然是4了。
[解决办法]
指针相减 与 值相减