我一直在研究这个问题:
#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