-1
double *p;

显然,gcc 4.6.3 仅p-O3.

myfunc (*(p++), *(p++));

这是一个错误吗?

4

2 回答 2

1

*(p++)不会增加指针指向的值。

如果你想要增加值,你会这样做(*p)++

另一件事是,您不能保证评估参数的顺序。这取决于编译器。所以左边可以先递增,再递增。无论一个参数将与原始值一起发送,下一个参数将是原始值 + 1(由于后增量的性质);在函数外部,如果您没有在其中修改 *p,则 *p 应该增加了两次。

于 2013-07-24T01:14:05.700 回答
1

如果增量运算符修改same variable. same sequence point (statement)例如,如果您调用这样的函数:

foo(++i, ++i)

C 标准没有说明增量应该以什么顺序执行,并且您无法预测将传递给函数的内容。它与您的功能相同。

myfunc (*(p++), *(p++))

他们中的任何一个都可以先评估。

于 2013-07-24T01:25:41.927 回答