假设我有一个奇怪的 add 函数,它执行加法和增量操作,然后将结果存储到其他地方。
void add(const int* a, const int* b, int* c) {
*c = *a++ + *b;
}
如果我将相同的指针传递给 a 和 c,
int a = 1, b = 3;
add(&a, &b, &a);
然后最终会修改
a
所指向的值。
我的问题:
x = x++
那样未定义?我觉得这两个问题的答案都应该是“是”,但我的 gcc 都给出了警告。
编辑:我知道为了代码的缘故可以有更好的解决方法。我的问题更多是关于语言功能本身。
无需尝试修改函数内的 const 指针。改为这样做:
void add(int* a, const int* b, int* c) {
*c = (*a)++ + *b;
}