如何在c ++中计算地址减法

时间:2013-09-14 16:25:20

标签: pointers

我对以下代码的输出感到有些惊讶:

double array[] = {4, 5, 6, 8, 10, 20}; 
double* p = array + 3; 
//Print array address
cout << (unsigned long)(array) << endl; //This prints 1768104
cout << (unsigned long)(p) << endl; //This prints  1768128 
//print p - array
cout << (unsigned long)(p - array) << endl; // This prints 3

我很惊讶最后一行打印3.不应该打印24 = 3 * 8字节?另外,正如所料,     p的地址是数组+ 3 * 8字节的地址。这似乎不一致。     事实上,写作甚至不是一个合法的任务:     p = p - 数组; //不能将int分配给double类型*不知道,为什么这是一个int。

2 个答案:

答案 0 :(得分:2)

指针算法以所操作大小的倍数工作。 p 3 double尺寸大于array,这就是您获得该回复的原因。这与p = array + 3行有效的原因相同。

如果你想要24,你可以采用不同的方式对字节大小的值进行操作:

cout << (char *)p - (char *)array;

您的语句p = p - array没有意义 - 您不能将整数(指针之间的差异)分配给指针变量。

答案 1 :(得分:1)

这就是pointer arithmetic的工作方式。

您可以尝试这样: -

cout << (char *)p - (char *)array;