字符串文字是否在C中编译时自动转换为char*?

she*_*lbc 5 c string types pointers compilation

如果我要做的事情如下:

printf("The string is: %s\n", "string1");
Run Code Online (Sandbox Code Playgroud)

以下是在编译时完成的:

printf("The string is: %s\n", (unsigned char*) "string1"); 
Run Code Online (Sandbox Code Playgroud)

还是类似的?

Lih*_*ihO 12

它由标准定义,字符串文字的类型是char1的数组,数组自动衰减为指针,即char*.在将其作为参数传递给printf使用%s说明符时,您不需要显式地强制转换它.

旁注:在C++中它是const char*2.


[1] C99 6.4.5:"字符串文字是用双引号括起来的零个或多个多字节字符的序列,如"xyz"... 静态存储持续时间和长度的数组足以包含序列对于字符串文字,数组元素的类型为char"

[2] C++ 032.13.4§1:"普通的字符串文字具有类型"n const char"的数组 和静态存储持续时间"