gpt4 book ai didi

c - 表达式 ( arr[i+1] - arr[i] ) 如何产生与索引差相同的十进制数?

转载 作者:行者123 更新时间:2023-11-30 18:23:52 27 4
gpt4 key购买 nike

我有一个字符串数组 arr[5][8] = {...} (声明了每个字符串),我试图了解 arr[3 的值是什么] - arr[2] 是什么以及它的类型是什么。我无法理解为什么地址之间的差异以字节为单位考虑,因为当我打印此内容时: printf("%d\n", names[2] - names[1]) 我得到 8 .

为什么会有这样的表现?完整的代码示例如下:

#include <stdio.h>     
int main()
{
char names[5][8] = { "Miri", "Tali", "Ronit", "Avigail", "Shlomit" };
printf("%d\n", names[2] - names[1]);
system("pause");
return 0;
}

输出为8

8 正是从 names[1]names[2] 的字节距离(每个字符串有 8 个字符,每个字符是 1 个字节)。但我输入了 %d 并认为这个距离将以这些字节的十进制表示形式打印。换句话说,我认为结果是8*255,因为1个字节可以表示的最大值是255,而这里我有8个字节(chars )。

最佳答案

在您的例子中,names[i]是一个字符数组,类型为char[8]

                +-----------------------------------------------------------+
names [0] | |
+-----------------------------------------------------------+
1000 1001 1002 1003 1004 1005 1006 1007

+-----------------------------------------------------------+
names [1] | |
+-----------------------------------------------------------+
1008 1009 1010 1011 1012 1013 1014 1015

+-----------------------------------------------------------+
names [2] | |
+-----------------------------------------------------------+
1016 1017 1018 1019 1020 1021 1022 1023

因此,当您说 names[2] - names[1] 时,基本上,您是在减去两个具有 8 个元素的数组成员。

换句话说,您要减去两个指针,其中每个指针都是指向数组类型的第一个元素的指针,每个指针包含 8 个元素。因此,差异为 8。

这与指针本身存储在内存位置指针处的值无关,您正在操作指针而不是指针指向的值。指针算术规则将适用于此。

也就是说,要打印指针减法的结果,您应该使用 %td as conversion specifier, the type would be ptrdiff_t .

引用 C11,第 §6.5.6 章

When two pointers are subtracted, both shall point to elements of the same array object, or one past the last element of the array object; the result is the difference of the subscripts of the two array elements. [....]

关于c - 表达式 ( arr[i+1] - arr[i] ) 如何产生与索引差相同的十进制数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48763720/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com