在指向指针的指针上使用指针算术是否定义明确? 例如
int a=some_value;
int* p=&a;
int**p2=&p;
现在对 p2 执行算术是否是定义明确的行为?(例如 p2+1、p2+2 等)
最佳答案
另一个答案是完全错误的:
int *p = &a;
声明一个单个指针变量(不是指针数组)。这是等效的,WRT 索引,具有单个元素的数组:
int *(array[1]) = { &a };
所以你可以做 (&array[0]) + 1
或 array + 1
,或 p + 1
,因为形成一个- 尾后指针是允许的:尾后指针指向数组末尾之后的虚构元素。尾数指针不可解引用,因为它没有指向任何真实对象。
但是您不能计算任何其他指针值。
特别是,p+2
无效。
关于pointers - Pointer Arithmetic on pointers to pointers 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7670946/