1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > c语言中字符串常量的创建 C语言中字符串常量到底存在哪了?

c语言中字符串常量的创建 C语言中字符串常量到底存在哪了?

时间:2019-11-18 06:20:19

相关推荐

c语言中字符串常量的创建 C语言中字符串常量到底存在哪了?

常量存储总结

局部变量、静态局部变量、全局变量、全局静态变量、字符串常量以及动态申请的内存区

1、局部变量存储在栈中

2、全局变量、静态变量(全局和局部静态变量)存储在静态存储区

3、new申请的内存是在堆中

4、字符串常量也是存储在静态存储区

补充说明:

1、栈中的变量内存会随着定义所在区间的结束自动释放;而对于堆,需要手动free,否则它就一直存在,直到程序结束;

2、对于静态存储区,其中的变量常量在程序运行期间会一直存在,不会释放,且变量常量在其中只有一份拷贝,不会出现相同的变量和常量的不同拷贝。

===============================================

关于字符串常量,下面有篇文章解释的很清晰:

char *c="zhouming";

书上说: "zhouming"这个字符串被当作常量而且被放置在此程序的内存静态区。

c为一个字符型指针,若为局部变量,则存储在栈内,该指针变量里面存了个地址,

该地址为字符串中第一个字母Z的地址。

当使用printf()输出时,格式化时选择%s,会输出zhouming,这是printf遇到结尾符号‘\0’即停止显示打印。

字符串“zhouming”是个常量,存储在一片连续的内存中,末尾有结尾符表示字符串的结束。

那一般的int i=1;

所有的字符窜常量都被放在静态内存区

因为字符串常量很少需要修改,放在静态内存区会提高效率

例:

char str1[] = "abcd";

char str2[] = "abcd";

const char str3[] = "abcd";

const char str4[] = "abcd";

const char *str5 = "abcd";

const char *str6 = "abcd";

char *str7 = "abcd";

char *str8 = "abcd";

cout << ( str1 == str2 ) << endl;

cout << ( str3 == str4 ) << endl;

cout << ( str5 == str6 ) << endl;

cout << ( str7 == str8 ) << endl;

结果是:0 0 1 1

str1,str2,str3,str4是数组变量,

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。