void x(){
int x[] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
int *p = x + 1;
while (*p++ >5)
printf ("%d ", *p);
printf ("\n");
}
输出:{7,6,5}
考虑到 C 中的优先级和关联性,我想仔细检查正确输出背后的基本原理。
当调用该函数时,它会自上而下执行,不带任何参数。
首先我们有一个包含 9 个元素的数组 x。
其次我们有一个指针p,它指向元素x[1];
第三,我们跳入 while 循环,每次 *p++ > 5 时都是如此。 这里首先评估的是 p++ 的地址递增,因此对于第一个元素 x[1],我们的值为 8,大于 5,因此 p 递增 (p++ = x[2] = 7) x [2] = 7 成为新的 *p 值(因为它现在指向 x[2])并且打印 7。
接下来我们有 7,它大于 5,p 递增 (p++ = x[3] = 6),因此打印 6,然后我们有 6,它仍然大于 5,p 递增 (p++ = x[ 4] = 5) 因此打印了 5,到目前为止我们已经打印了 {7, 6, 5}。
然后我们评估 x[4] 的位置为 5,不大于 5,因此我们跳出 while 循环并最终得到输出。 {7,6,5}。
我对这个问题的推理正确吗?
最佳答案
Is my reasoning for this question correct?
自行以来
while (*p++ >5)
printf ("%d ", *p);
更简单的形式相当于
while (*p >5)
{
p = p + 1; // Or: p++; Or: ++p;
printf ("%d ", *p);
}
然后是的,你的推理是正确的
如果您处于初级水平,我建议您避免在复杂表达式中使用前增量 (++x
) 和后增量 (x++
)。它们是造成许多初学者错误的原因。仅将它们用作单个表达式。保持事情简单,可以避免许多错误。
关于c - C 中算术指针后增量输出背后的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49484080/