#include<stdio.h>
int main()
{
printf("%c",*"abcde");
return 0;
}
'a' 将如何成为该程序的输出?让我知道为什么在 turbo c 中编译时输出为“a”。这里的“*”意味着什么?
#include<stdio.h>
int main()
{
printf("%c",*"abcde");
return 0;
}
'a' 将如何成为该程序的输出?让我知道为什么在 turbo c 中编译时输出为“a”。这里的“*”意味着什么?
"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.
"abcde"是字符串文字,因此具有数组类型。sizeof在除或 的操作数之外的任何上下文中&,数组衰减为指向其第一个元素的指针。因此,当用作一元运算*符的操作数时,"abcde"它被评估为指向字符串开头的“a”的指针,并且*运算符取消引用该指针,获得 value 'a'。将此值(整数)传递printf给使用%c格式说明符进行格式化会导致printf将相应的字符“a”打印到标准输出。