![](/img/trans.png)
[英]A way to automatically cast string literals to `unsigned char*` in C?
[英]Are string literals automatically being casted to char* at compile time in C?
如果我要做的事情如下:
printf("The string is: %s\n", "string1");
以下是在编译时完成的:
printf("The string is: %s\n", (unsigned char*) "string1");
还是类似的?
标准定义了字符串文字的类型是char
1的数组,并且数组自动衰减为指针,即char*
。 当使用%s
说明符时,将它作为参数传递给printf
时,不需要显式强制转换它。
旁注:在C ++中它是const char*
2 。
[1] C99 6.4.5: “字符串文字是用双引号括起来的零个或多个多字节字符的序列,如”xyz“... 静态存储持续时间和长度的数组足以包含序列对于字符串文字,数组元素的类型为char
“
[2] C ++ 032.13.4§1: “普通的字符串文字具有类型”n const char
数组“和静态存储持续时间”
尽管机制不同,但您的理解或多或少是正确的。
除了当它是的操作数sizeof
或一元&
运营商,或者是一个字符串被用来初始化一个声明另一个数组,类型“的N元件阵列的表达T
将被转换(“衰变”)”,以“指向T
指针”类型的表达式,表达式的值将是数组中第一个元素的地址。 对于所有数组类型都是如此,而不仅仅是字符串文字。
表达式"string1"
具有类型“8-element array of char
” 1 ; 在printf
调用中,它不是sizeof
或unary &
运算符的操作数,也不是用于初始化另一个数组,因此它被隐式转换为“指向char
指针” 2的表达式,其值是该地址的第一个角色。
const char
数组,因此表达式将衰减为const char *
类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.