考虑以下代码片段:
int (*p)[3];
int (*q)[3];
q = p;
q++;
printf("%d, %d\n", q, p);
printf("%d\n", q-p);
我知道指针算术是智能的,这意味着操作 q++
提前 q
足够的字节来指向下一个 3 整数数组,所以它不会令我惊讶的是,第一个打印是“12, 0
”,这意味着递增 q
使其在 12 中变大。
但是第二张打印确实让我感到惊讶。它打印 1!
那么为什么它会打印 1 而不是 12 呢?这让我很困惑。
最佳答案
与 ++
增量运算符一样,带有指针的 -
减法运算符也会考虑所指向对象的大小。具体来说,返回的结果是指针值的字节数差除以所指向对象的大小(在您的示例中为 12)。所以差值是 12 个字节,除以大小 12,即 1。
关于c - C 中的指针算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49960067/