c/c++开发分享字符串文字是否在C中编译时自动转换为char *?

如果我要做的事情如下:

printf("The string is: %sn", "string1"); 

在编译时完成以下操作:

 printf("The string is: %sn", (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指针”类型的表达式,表达式的值将是数组中第一个元素的地址。 对于所有数组类型都是如此,而不仅仅是字符串文字。

    表达式"string1"具有类型“8-element array of char1 ; 在printf调用中,它不是sizeof或一元&运算符的操作数,也不是用于初始化另一个数组,因此它被隐式转换为“指向char指针” 2的表达式,其值是该地址的第一个角色。


    1. 7个字母加0终结符。
    这是C的情况; 在C ++中,字符串文字是const char数组,因此表达式将衰减为const char *类型。

      以上就是c/c++开发分享字符串文字是否在C中编译时自动转换为char *?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545907.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注