将指针传递到与函数参数相同的地址

问题描述 投票:0回答:1

假设我有一个奇怪的 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
所指向的值。

我的问题:

  1. 这是否违反了第一个参数的 const 限定符?
  2. 该操作是否像典型的无序
    x = x++
    那样未定义?

我觉得这两个问题的答案都应该是“是”,但我的 gcc 都给出了警告。

编辑:我知道为了代码的缘故可以有更好的解决方法。我的问题更多是关于语言功能本身。

c pointers language-lawyer sequence-points
1个回答
0
投票

无需尝试修改函数内的 const 指针。改为这样做:

void add(int* a, const int* b, int* c) {
    *c = (*a)++ + *b;
}
© www.soinside.com 2019 - 2024. All rights reserved.