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

一个关于指针地址的有关问题

2012-09-10 
求助一个关于指针地址的问题今天想测试下在自己的编译环境里int是几个字节,写了如下代码:#includestdio.h

求助一个关于指针地址的问题
今天想测试下在自己的编译环境里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了。
[解决办法]
指针相减 与 值相减

热点排行