为什么我在C中使用printf时输出奇怪?



我一直在研究这个问题:

#include<stdio.h>
int main()
{
printf(5 + "Good Morning ");
return 0;
}

为什么这个打印Morning?

解释吗?

在这个printf

调用中
printf(5 + "Good Morning ");

使用类型为char[14]的字符串字面值"Good Morning "。在表达式5 + "Good Morning "中使用,转换为指向其第一个字符的指针,类型为char *

因此,由于指针算术,具有char *类型的表达式指向字符串字面值的位置等于5的元素(位置从0开始),即它指向原始字符串字面值的子字符串"Morning "。然后输出该子字符串

你可以用下面的方式重写调用,使它更清晰

char * literal = "Good Morning ";
printf( literal + 5 );

char * literal = "Good Morning ";
printf( &literal[5] );

或者类似

printf( &"Good Morning "[5] );

这里是一个示范程序,但我使用puts而不是printf

#include <stdio.h>
int main(void) 
{
size_t i = 0;

while ( puts( i + "Good Morning " ) != 1 ) i++;
return 0;
}

程序输出为

Good Morning 
ood Morning 
od Morning 
d Morning 
Morning 
Morning 
orning 
rning 
ning 
ing 
ng 
g 

相关内容

  • 没有找到相关文章

最新更新