当我在C中学习字符串时,我遇到了以下代码
#include <stdio.h>
int main()
{
char str[15] = "Hello, World";
printf("str[0] = %c\n", str[0]);
printf("*(str + 0) = %c\n", *(str + 0));
printf("*(0 + str) = %c\n", *(0 + str));
printf("0[str] = %c\n", 0[str]); /* This line 0[str] */
return 0;
}
我能从程序中找到的简单事情是
str[0]
将生成 H
*(str + 0)
也会产生 H ,因为它使用指针运算
*(0 + str)
与*(str + 0)
类似,也会产生 H
我无法弄清楚0[str]
的含义是什么,以及它如何评估 H 。据我所知,[ ]
符号代表一个数组,0
不是数组。
答案 0 :(得分:2)
查看下面的代码,
char str[10];
str
将返回数组str[10]
的起始地址。
因此,在您的示例*(str + i)
中,将返回元素str[i]
。
str[i] = i[str]
因为加法是可交换的。
由于*(str + i)
和*(i + str)
相同,因为i + str = str + i
。
具体为0[str] = str[0]
,因为*(str+0) = *(0+str)
。
因为str+0 = 0+str =str
。