【发布时间】:2018-07-23 15:23:00
【问题描述】:
我有一个字符串数组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)。
【问题讨论】:
-
“我不明白为什么要以字节为单位考虑地址之间的差异” - 如果不以字节为单位考虑,那还有什么?以比特、公里还是升为单位?为什么是 8 * 255 而不是 8 * 256?什么是 255?