pointers - Pointer Arithmetic on pointers to pointers 等

标签 pointers pointer-arithmetic

在指向指针的指针上使用指针算术是否定义明确? 例如

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]) + 1array + 1,或 p + 1,因为形成一个- 尾后指针是允许的:尾后指针指向数组末尾之后的虚构元素。尾数指针不可解引用,因为它没有指向任何真实对象。

但是您不能计算任何其他指针值

特别是,p+2 无效

关于pointers - Pointer Arithmetic on pointers to pointers 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7670946/

相关文章:

c - 指针/地址差异

c - 指针和数组的微妙概念

我可以通过指针从另一个文件访问一个文件的静态变量吗?

c++ - 如果ap是一个指针,为什么我可以通过ap[i]来引用它的值呢?

c++ - 从类 A 到类 B 的方法的空指针

使用 C 中的一些通用函数调用来调用多个函数

c++ - 编译器是如何被欺骗提供指向封闭类的指针的?

c - *(x+i) 与 &x[i] 相同吗?

c - C 新手,返回指向二维数组的指针

c - 指针分配与元素或结构分配有什么区别?