社区
C语言
帖子详情
文字常量的生存期问题?
cxd306021
2005-07-04 12:24:21
请问文字常量的生存期是咋样?
char *Func(void)
{
char str[]="hello world";//
}
...全文
431
9
打赏
收藏
文字常量的生存期问题?
请问文字常量的生存期是咋样? char *Func(void) { char str[]="hello world";// }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
seamine
2005-07-04
打赏
举报
回复
全局变量是从定义开始到文件结束
/*文件名Main.c*/
#include <stdio.h>
char Title[]="Note Book";//这里开始
void main();
{
}//这里结束
wxiaolanzhuw
2005-07-04
打赏
举报
回复
和变量的生存期一样
晨星
2005-07-04
打赏
举报
回复
char *Func(void)
{
char str[]="hello world";//
}
这个定义及初始化语句会把文字常量“hello world”的内容拷贝到字符数组str中,所以函数退出后,虽然文字常量还存在于,但你却没法引用它,而str中的副本却随着Func函数的退出而释放了。
再需要的情况下:还是这样好些:
char *Func(void)
{
char* str="hello world";//
return str;
}
指针str始终指向静态存储区文字常量的地址,所以不怕函数退出。
seamine
2005-07-04
打赏
举报
回复
局部变量是从定义开始到块结束,例如
char *Func(void)
{
char str[]="Hello World"; //从这开始
}
hongfeeling
2005-07-04
打赏
举报
回复
不清楚呀
humanity
2005-07-04
打赏
举报
回复
Java 中 "sdfsdf" 出生后,总在那儿, 直到进程退出. 你每次 String a="sdfsdf" JVM 就查找这个是不是已经存在,找到就给你, 没有找到就创建一个给你.
因为字面量太特殊了, 存在就不可以修改.
C++ 我觉得也差不多 , 哈哈, 不懂 C++.
neverfor
2005-07-04
打赏
举报
回复
我记得字面量好像是作为 static类型数据分配存储的。记得不是很清楚了。
cxd306021
2005-07-04
打赏
举报
回复
to firstdreamer(=&穷则独善其身&=) :文字常量到底分配在哪里?
TO: seamine(蓝色梦想) 全局变量从定义开始,作用于该程序的所有文件,而非它所在的文件.
TO: steedhorse(晨星) 文字常量存于静态存储区,确定吗?哪里有相应帮助?
char *Func(void)
{
char* str="hello world";//
return str;
}
指针str始终指向静态存储区文字常量的地址,所以不怕函数退出,但是当函数退出时, str已被释放,此时为未定值,所以这样做是错误的。
最后我的问题是不是文字常量的生存期,作用域和存储区,分别是啥?
firstdreamer
2005-07-04
打赏
举报
回复
希望这个对你有所帮助,内存分配方式有三种:
(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的
整个运行期间都存在。例如全局变量,static 变量。
(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函
数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集
中,效率很高,但是分配的内存容量有限。
(3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意
多少的内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存
期由我们决定,使用非常灵活,但问题也最多。
堆、栈、
生存期
的区别
本文详细介绍了C++中的内存管理,包括堆和栈的分配、
生存期
及其特点。堆内存动态分配,程序员需手动释放,易产生内存泄漏;栈内存由编译器自动管理,效率高,空间有限。堆适合大块内存的分配,栈则适用于小规模、频繁操作的数据。同时,文章通过实例展示了内存分配在不同存储区的情况,强调了理解堆栈差异对优化程序的重要性。
C++内存空间:静态存储区、栈、堆、
文字
常量
区、程序代码区
本文深入探讨C++中不同类型的内存区域,包括静态存储区、栈区、堆区、
文字
常量
区和程序代码区的功能与特性。详细分析了局部对象、全局对象、静态对象的生命周期,以及动态内存分配的机制。同时,对比了堆与栈的主要区别,包括管理方式、空间大小、产生碎片、生长方向、分配方式和效率。
java 堆和
常量
_java中的堆栈和
常量
池
本文详细介绍了Java内存管理中的栈、堆和
常量
池的概念及工作原理。栈用于存储基本类型和引用,存取速度快但大小和
生存期
固定;堆动态分配内存,适合存储对象,但速度较慢。
常量
池则用于存储字符串
常量
和基本类型
常量
,实现对象共享,提高性能。此外,文章还深入探讨了String对象在内存中的存储方式及其特性。
学渣笔记——
文字
量,标识符,变量,
常量
的定义
本文深入解析程序设计中的核心概念,包括
文字
量、标识符、变量及
常量
,阐述它们的定义与作用,为初学者提供清晰的理解路径。
java 堆 栈 方法区
常量
_java堆、栈、方法区、
常量
池
本文介绍了Java中栈、堆、方法区和
常量
池的相关知识。栈用于存放基本类型变量和对象引用,存取速度快但数据大小和
生存期
需确定;堆存放new创建的对象和数组,由垃圾回收器管理,可动态分配内存但存取慢;方法区存储类信息等;
常量
池在编译期确定,执行时存于方法区。
C语言
70,038
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章