我对以下代码的输出感到有些惊讶:
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。
答案 0 :(得分:2)
指针算法以所操作大小的倍数工作。 p
3
double
尺寸大于array
,这就是您获得该回复的原因。这与p = array + 3
行有效的原因相同。
如果你想要24,你可以采用不同的方式对字节大小的值进行操作:
cout << (char *)p - (char *)array;
您的语句p = p - array
没有意义 - 您不能将整数(指针之间的差异)分配给指针变量。
答案 1 :(得分:1)