【发布时间】:2013-05-22 10:36:46
【问题描述】:
我在 c 中处理指针,当我运行以下代码时,我得到“l”作为输出!为什么?
char *s = "Hello, World!";
printf("%c", 2[s]);
2[s] 是什么意思?
【问题讨论】:
-
因为
2[s] == s[2] -
您有 6 个相同的答案。选择一个。
我在 c 中处理指针,当我运行以下代码时,我得到“l”作为输出!为什么?
char *s = "Hello, World!";
printf("%c", 2[s]);
2[s] 是什么意思?
【问题讨论】:
2[s] == s[2]
2[s] 与 s[2] 相同,因为编译器将两者都转换为 *(2 + s)
这里有一个很好的链接:why are both index[array] and array[index] valid in C?
【讨论】:
s[2] 实际上是*(s+2*sizeof(char))。如果s 是一个整数数组,那么2[s] 仍然是*(2+s),但s[2] 是*(s*sizeof(int)),等于8[s](假设sizeof(int)==4)。
s+2 始终与2+s 相同。指针运算始终适用于所指向类型的倍数。
这会打印出 s[2],即 l。这是因为 s[i] 在语法上等于 *(s + i)。因此 s[2] 和 2[s] 都被转换 为 *(s + 2)。
【讨论】:
s[2] 和 2[s] 都是一样的。这就是 C 编译器的构建方式。 内部 s[2] 被视为 *(s+2)。类似于 2[s]。
【讨论】:
2[s] 与 s[2] 相同,可以写成 *(s+2)。
【讨论】:
这是s[2] 的另一种写法,它们的意思是一样的。在这种情况下,它将打印字符串的第三个字符,即'l'
【讨论】: