c语言 - 我想知道为什么 &a(数据类型:char) 打印为值而不是地址,使用 %s


#include <stdio.h>
int main(void)
{
char var = 'z';
printf("[buf]: %s n", &var); // the output is z~~~~~, but the first char of output is only z. why??
}

转换说明符s用于输出字符串(或其部分(:以零字符''结尾的字符序列。

为了输出对象的地址,有转换说明符p

这是一个示范节目。

#include <stdio.h>
int main(void) 
{
char s[] = "Hello";

printf( "%sn", s );
printf( "%pn", ( void * )s );

return 0;
}

程序输出可能看起来像

Hello
0x7ffc86fe4372

至于问题中的代码,它有未定义的行为,因为表达式&var不指向字符串,因为变量var的定义类似

char var = 'z';

如果你想输出它的地址,那么你可以把它作为

printf("[buf]: %p n", ( void * )&var);

%s告诉printf接受指向字符串第一个字符的指针,并打印该字符串,直到指示其结束的空字符。由于您传递了单个字符的地址,printf会打印该地址,并继续在内存中查找更多要打印的字符,直到找到一个包含零的字节。对于%s,当您传递指向单个字符的指针,而不是以null字符结束的字符数组时,C标准不定义该行为。

要打印地址,请使用%p并将指针转换为void *:

printf("%pn", (void *) &var);

最新更新