c语言关于字符串常量的问题
来源:互联网 发布:随意画线软件 编辑:程序博客网 时间:2024/04/29 23:30
c语言关于字符串常量的问题。
我们先看一个例子:
// 所以说
// ptr[4] = 'x';
// 上面的语句是能通过编译的!
// 但是运行的时候会出现问题!!---- segmentation fault
// 编译就不能通过,避免运行时程序崩溃。
字符串常量:
局部变量、静态局部变量、全局变量、全局静态变量、字符串常量以及动态申请的内存区
1、局部变量存储在栈中
2、全局变量、静态变量(全局和局部静态变量)存储在静态存储区
3、new申请的内存是在堆中
4、字符串常量也是存储在静态存储区
补充说明:
1、栈中的变量内存会随着定义所在区间的结束自动释放;而对于堆,需要手动free,否则它就一直存在,直到程序结束;
2、对于静态存储区,其中的变量常量在程序运行期间会一直存在,不会释放,且变量常量在其中只有一份拷贝,不会出现相同的变量和常量的不同拷贝。
我们先看一个例子:
char *ptr = "David";
ptr[4] = 'x';
printf("%s\n", ptr);
// 这里说一下,ptr是指针, 指向一个字符串 常量!!// 所以说
// ptr[4] = 'x';
// 上面的语句是能通过编译的!
// 但是运行的时候会出现问题!!---- segmentation fault
// 因为常量无法修改。
// const char *ptr = "David";
// 编译就不能通过,避免运行时程序崩溃。
char sptr[] = "David";
sptr[4] = 'x';
// 这样其实是声明了 一个数组大小由后面初始化常量决定 的字符数组变量 。
// sptr[4] = 'x'; 不仅通过编译,而且可以执行。
字符串常量:
- 类型是char[] (原因不明,没有看到过权威解释,估计是历史遗留。)
- 连续存储,末尾自动添加\0
- 静态存储
- 相同值常量的地址可以不同
- 修改字符是未定义行为,不可以修改
- 在内存中唯一存在
另外知识
常量存储总结局部变量、静态局部变量、全局变量、全局静态变量、字符串常量以及动态申请的内存区
1、局部变量存储在栈中
2、全局变量、静态变量(全局和局部静态变量)存储在静态存储区
3、new申请的内存是在堆中
4、字符串常量也是存储在静态存储区
补充说明:
1、栈中的变量内存会随着定义所在区间的结束自动释放;而对于堆,需要手动free,否则它就一直存在,直到程序结束;
2、对于静态存储区,其中的变量常量在程序运行期间会一直存在,不会释放,且变量常量在其中只有一份拷贝,不会出现相同的变量和常量的不同拷贝。
0 0
- c语言关于字符串常量的问题
- 关于C语言中字符串常量的问题
- 关于C语言中 字符串常量的问题
- c语言中字符串常量定义时的换行问题
- 关于常量字符串的问题
- 关于c语言中的字符串的问题
- c语言字符串常量
- C语言常量字符串
- C语言中字符串常量的妙用
- C语言使用字符串 常量的定义
- C语言中字符常量和字符串常量的区别
- C语言中字符串常量和字符常量的区别
- 关于字符串常量池的问题
- 关于函数返回字符串常量的问题
- 一个关于字符串常量池的问题
- 【C语言·字符串】关于字符串的存储问题
- 【C语言·字符串】关于字符串的输入问题
- 【C语言·字符串】关于字符串的输出问题
- 第2周-项目5-数组作数据成员-工资类(动态数组)
- [Python]中缀表达式转前缀表达式
- 小马哥---高仿红米MI NOTE 小米5 实战详细拆机主板图与开机界面图 H78主板 高仿小米15年新版
- (4.4.3)android的布局类
- Java中的instanceof关键字
- c语言关于字符串常量的问题
- poj1265 & poj2954(皮克定理pick)在格点上的多边形求面积公式
- POJ - 3488 Arne Saknussemm(水题,细节题)
- getHibernateTemplate()的方法介绍
- oracle 快速删除表中的所有记录
- 第2周-项目5-数组作数据成员-工资类(文件读取)
- xstream实现xml与Object之间的自如转换
- Implement strStr()
- 新手对于iPhone开发环境等入门问题解答汇总