Akb*_*rov 0 c pointers operator-precedence
我刚开始使用C和Pointers。关于指针的一元增量操作,有一个使我感到困惑的概念。
int num1, *pnum1
num1 = 2;
pnum1 = &num1;
printf("%d \n before: " , *pnum1);
num1 = (*pnum1)++;
printf("%d \n after: " , *pnum1);
return 0;
Run Code Online (Sandbox Code Playgroud)
由于一元增量运算符(++)的优先级高于解引用运算符(*),因此我将* pnum1放在大括号内。我期望看到以下结果:
之后:3
但是它不会增加num1的值。为什么会这样呢?是不是应该增加num1的值?
这是未定义的行为。您正在递增num1(通过(*pnum1)++),然后将结果分配回num1。在这种情况下,递增和分配发生的顺序是不确定的,因此它可以获取的旧值num1,增量num1然后将其分配回num1,这似乎是编译器选择执行的操作。
如果尝试num1 = num1++改用,编译器可能会警告您。
解决方案是不要做这样的事情,因为这是不确定的行为。
查找“序列点”以获取更多信息。
| 归档时间: |
|
| 查看次数: |
36 次 |
| 最近记录: |