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