以双引号开头的行在C中是什么意思?

以双引号开头的行在C中是什么意思?,c,C,我在一次采访中被问到,下面这行用C写了什么?在我看来,以下行没有任何意义: "a"[3<<1]; “a”[3令人惊讶的是,它确实有一个含义:它是对表示字符串文字的字符数组的索引。顺便说一句,这个特殊的索引位于6,这超出了文字的限制,因此是未定义的行为 可以按照相同的基本模式构造表达式: char c = "quick brown fox"[3 << 1]; 想想这个: "Hello world"[0] 是'H' “Hello world”是一个字符串文字。字符串文

我在一次采访中被问到,下面这行用C写了什么?在我看来,以下行没有任何意义:

"a"[3<<1];

“a”[3令人惊讶的是,它确实有一个含义:它是对表示字符串文字的字符数组的索引。顺便说一句,这个特殊的索引位于
6
,这超出了文字的限制,因此是未定义的行为

可以按照相同的基本模式构造表达式:

char c = "quick brown fox"[3 << 1];
想想这个:

"Hello world"[0] 
'H'


“Hello world”
是一个字符串文字。字符串文字是一个字符数组,它被转换成指向表达式中数组第一个元素的指针。
“Hello world”[0]
表示数组的第一个元素。

它确实有意义。提示:
a[b]
的意思与
*(a+b)完全相同
(不过,我认为这不是一个很好的面试问题。)

“a”
是一个由2个字符组成的数组,
'a'
,和
0
3“some_string”[I]返回给定字符串的第I个字符。
3
的意思与a
相同。”
不会开始一行。但是,是的,因为值被丢弃(除非行继续)…那么它可能只是一个愚蠢的代码(但请看前一行)。表达式
“a”[31][“a”]
(两者都是有效的表达式,返回字符
\0
)。不是“有意义”和“未定义的行为”两种相互矛盾的说法?我不这么认为。语法意义是“access array element”,语义意义是“undefined behavior”.特别是这个问题不是很好,因为不管代码是什么意思,它肯定不能保证打印任何东西。缺少对I/O函数的调用等。哦,它有很多问题。顺便说一句,我只是注意到当我看到这个问题时,我误读了它,认为它是在问
(3
"Hello world"[0]