-2

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

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 - array; // 不能将 int 分配给 double* 不知道,为什么这是一个 int。

4

2 回答 2

2

指针算术以被操作大小的倍数工作。 p尺寸3 double大于array,所以这就是您得到该响应的原因。这与您的p = array + 3生产线有效的原因相同。

如果您想要 24,请以不同的方式进行转换以对字节大小的值进行操作:

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

您的陈述p = p - array毫无意义-您不能将整数(指针之间的差异)分配给指针变量。

于 2013-09-14T16:27:31.050 回答
1

这就是指针算法的工作原理。

你可以这样尝试:-

cout << (char *)p - (char *)array;
于 2013-09-14T16:28:30.667 回答