c - C 中的指针算术

标签 c pointers pointer-arithmetic

考虑以下代码片段:

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/

相关文章:

c - 为什么下面代码中的 printf 语句打印的是一个值而不是垃圾值?

C snprintf sprintf 检测到堆栈粉碎

c++ - 运行时在 C++ 上调试断言失败

c++ - 以十进制打印变量地址

c - 如何在 C 中将 char* 添加到 char**

char** 来处理字符串?

c++ - 是否在特定实现上定义了两个数组之间的指针差异?

c - Spidev 不使用 ioctl 同时写/读

一个预处理器函数可以用来定义多个预处理器宏吗?

c - 指针是否支持 "array style indexing"?