首页 > 编程知识 正文

字符常量和字符串常量有何区别,字符串常量和字符常量

时间:2023-05-05 03:11:45 阅读:120003 作者:3441

字符串常数有些编译器将相同的字符串常数视为一个(节省空间),有些编译器不执行此优化//1。 字符串常数vs中可共享的void test01 ) ) {char * p1='hello world '; char * p2='hello world '; char * p3='hello world '; printf(%d(n ),) hello world ); printf(%d(n )、p1 ); printf(%d(n )、p2 ); printf(%d(n )、p3 ); }

33558www.Sina.com/(vs环境下) voidteST01 ) char*P1='Helloworld '; //字符串常数,指针p1是该字符串的起始地址printf(%dn )、p1 ); printf(%c(n ),p1[0]; //p1[0]='W '; //不允许更改常量字段的内容printf(%s(n )、p1 )。 //无法打印,程序错误}这里的字符串“hello world”位于常量区域,指针变量p1被定义为指向该常量区域,但常量区域的数据不能更改;

在上述情况下,字符串常数的修正失败,但这不是绝对的

一些编译器将多个相同的字符串常量视为一个“节省空间”,而其他编译器则在不进行此优化的ANSI C中进行了规定。 变更字符串常数的结果,有的编译器可以变更字符串常数,也有字符串常数字符串变量void test 02 { char P1 [ ]=' hello world '; printf(%d(n )、p1 ); printf(%c(n ),p1[0]; p1[0]='W '; 允许修改//printf(%s(n ),p1 ); //打印输出Wello world}这里的p1是相当于字符串变量的字符数组。 字符串" hello world "位于常量区域,但在函数调用时定义了用于存储字符串的字符数组p1,并将其从常量区域复制到堆栈区域。 实际修正不是常数区域的" hello world ",而是修正堆栈区域的字符数组的数据,所以修正成功,能够进行通常的打印输出

总结:避免修改字符串常量; 通常,不能修改字符串常量。 强制修复程序报告错误或崩溃,但某些编译器允许修复

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。