是printf("%d",*(++(*a)));
未定义的吗?这a
是指向整数的指针。
我没有除此之外的其他代码。它是这个问题的扩展,它造成了很多混乱。只想知道这个印刷品中发生了什么。它取决于架构(32 Vs 64)或编译器版本。
希望答案是描述性的和清晰的。
如果你把它分解,它会这样做:
a
*a
++(*a)
*(++(*a))
因此,如果 存储的值+1a
是一个有效的指针,这将起作用。否则,结果是未定义的,很可能会导致运行时错误。
是的,您的代码是正确的,即使神秘可以产生一些(很少)意义,例如:
void print_next(int **a) {
printf("%d\n",*(++(*a)));
}
int arr[] = {1,5,6,3,5,6};
int *p = arr;
while (p<arr+6)
print_next(&p);
如果您的问题是专门关于*(++(*a))
表达式的,那么这里没有任何未定义的内容(假设所有涉及的指针都是有效的)。不会尝试对同一个对象进行多次修改。没有任何修改过的对象的独立读取。故事结局。
基本上,这里没有什么可解释的,因为代码以一种相当直接的方式非常好。真的没有比这更“描述性和清晰”的空间了。
如果这还不够清楚,您必须解释在此表达式中对您来说究竟是什么可疑之处。