在C中解除引用字符串文字有什么影响?

#include int main() { printf("%c",*"abcde"); return 0; } 

如何’a’将成为该计划的输出? 让我知道为什么在使用turbo c编译时输出为’a’,这里的’*’意味着什么?

"abcde"是一个字符串文字,因此具有数组类型。 在任何上下文但是sizeof&的操作数的情况下,数组衰减到指向其第一个元素的指针。 因此,当用作一元*运算符的操作数时, "abcde"被评估为指向字符串开头的“a”的指针,而*运算符取消引用该指针,获得值'a' 。 将此值(整数)传递给printf以使用%c格式说明符进行格式化会导致printf将相应的字符“a”打印到stdout。

"abcde"是一个字符串文字,它是一个字符数组( char[] )。 它通常放在程序的只读数据部分。 如果你要将它传递给printf ,编译器实际上是将该数组的地址传递给printf

但是,在这里,您将取消引用该指针,该指针仅传递第一个字符。

这是一个等效的,更详细的版本,可能更有意义:

 const char* str = "abcde"; // str is a char* pointer to "abcde" char c = *str; // De-reference that pointer - in other words, // get me the char that it points to. printf("%c", c); // Pass that char to printf, where %c is // expecting a char.