C++ 关于指针的问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 10:30:40
书上的示例:

long i1=1,i2=2;
long *p1=NULL,*p2=NULL;
p1=&i1;
p2=&i2;
cout << hex << p1 << endl << p2;

运行结果:0x12FEC8
0x12FEBC

然后书上p1和p2相差4个字节,说明long占用4个字节,i1和i2是相邻的存储单元。

我的问题是,p1和p2相差4个字节,是怎么算出来的?我怎么算是差12个字节?
求高人解答
0x12FEC8 - 0x12FEBC =C(12),难道不对吗?

lz陷入了一个误区!——紧挨着分配的单个变量不一定是分配在连续的空间中的!
怎么说呢,建议你把 long i1=1,i2=2; 改为:long a[2] = {1,2}; 再对a[0]、a[1]进行测试!应该会对了!

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
long i1=1,i2=2;
long *p1=NULL,*p2=NULL;
p1=&i1;
p2=&i2;
printf("0x%x 0x%x\n", p1, p2);
}

//我用的c,不会是12字节。。。

这个问题建议不要去深究,因为在不同的编译器,不同的系统下结果都有可能不同,如果非要研究就像楼上说的,改成long a[2]来算,没有那个编译器说你连续定议两个变量,就一定会把这两个变量放在一起。