c - 给定 C 代码中指针减法产生的值

标签 c

<分区>

执行下面显示的代码后,输出为 4。

谁能解释这段代码中发生了什么。

据我了解:

a[1]的地址即数组元素20的地址存放在指针变量p中,60的地址存放在变量q中。 q-p 完成并打印出来。但 我预计输出会有所不同。

例如,假设第一个元素的起始地址为 100,每个元素占用 2 个字节的整数。那么 a[0] 地址是 100,a[1] 102,a[2] 104,a[3] 106,a[4] 108,a[5] 110。

现在 a[5] 的地址 - a[1] 的地址 = 110-102 = 8

但是值为4。对此有何解释。我哪里遗漏了什么?

Here (键盘链接)是 C 代码:

int main()
{
        int a[] = { 10, 20, 30, 40, 50, 60 };
        int *p = &a[1], *q = &a[5];
        printf("%d",q - p);
        return 0; 
}

最佳答案

当你减去同一个数组中的指针时,你会得到与减去相应索引相同的差异。 C 指针算法以这种方式工作,以保护您不必考虑数组元素的大小。

因此,从 a[j] 的地址中减去 a[i] 的地址与减去 i 的结果相同来自 j

请注意,减法的结果类型为 ptrdiff_t ,它可能不适合一个整数。

关于c - 给定 C 代码中指针减法产生的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41100624/

相关文章:

c - 有没有办法将 .so 文件转换为 .c 文件?

为 ANSI-C 创建编译时查找数组?

c - 系统调用是否直接发送到内核?

c - ^Z 字符是否写入文件?

c - 链表查找长度——这两个函数有什么区别?

c - C标准是否指定递增指针时进位传播的距离?

c - 我在数组中的一个值是 "0"

计算平均值等的C程序

铿锵: error: no such file or directory error

c - 符号 `M' 没有定义为 C/C++ 预处理器宏