我刚刚开始学习 C 中的指针,并使用指针
p
来迭代数组的元素。value + 1
,而只会显示数组中的奇数。
这是代码:
#include <stdio.h>
#define N 10
int main(void)
{
int a[N] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, *p;
for (p = &a[0]; p < &a[N]; p++)
{
*p++;
printf("%d ", *p);
}
return 0;
}
输出:
1 3 5 7 9
然后我将
++
替换为 += 1
,输出正如我最初预期的那样:
1 2 3 4 5 6 7 8 9 10
我真的不明白这里发生了什么,直到现在我认为这两种符号对于每个用例都是等效的。
C99 中 *p++ 和 *p += 1 有什么区别?
这是一个运算符优先级的问题:
*p++
:++
比解除引用具有更高的优先级 *
,*(p++)
。*p += 1
:*
的优先级高于 +=
,(*p) += 1
。如果你想得到(2)(
*p += 1
)的结果而不使用+=
,你可以通过使用括号来实现,即:(*p)++
。++*p
。