char* s = "123";
std::cout << s[s[3]] << std::endl; // prints 1
std::cout << s[3] << std::endl; // prints nothing?
我尝试运行以下代码段,第一个print语句输出1
,而第二个语句(似乎(什么都不输出。当使用这里的char指针数组的长度取消引用指针时,会发生什么?
不清楚为什么要使用索引3(s[3]
(处字符的值来再次索引字符串。但在任何情况下,这里的关键点是使用char
对数组进行索引。这意味着char
被用作数字,转换很可能使用ASCII字符编码。
打印s[3]
时没有打印出任何内容的原因是,s
是一个长度为4的字符数组,最后一个字符是null终止符。Null表示数字0。null终止符标识字符串的末尾。但它不是可打印字符,因为它不是要打印的。它没有相关的英文字母,所以你不会打印任何东西。
当然,现在你可以看到s[s[3]]
只不过是s[0]
,这就是字符";1〃;。