我对以下代码的输出感到有些惊讶:
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。