社区
C语言
帖子详情
文字常量的生存期问题?
cxd306021
2005-07-04 12:24:21
请问文字常量的生存期是咋样?
char *Func(void)
{
char str[]="hello world";//
}
...全文
386
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++编译时分为5大存储区: 1.堆区 2. ...
JVM3:图解类装载与运行时数据区,方法区,堆,运行时
常量
池,
常量
池分哪些?String s1 = new String创建了几个对象?初识栈帧,栈的特点,Java虚拟机栈,本地方法发栈,对象指向
问题
在虚拟机启动时创建2)虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却又一个别名叫做Non-Heap(非堆),目的是与Java堆区分开来3)用于存储已被虚拟机加载的类信息、
常量
、静态变量、即时编译器编译后的...
[C++]对象的存储类型与
生存期
[C++]对象的存储类型与
生存期
详解栈区、堆区、全局区、
文字
常量
区、程序代码区
C的内存基本上分为4部分:静态存储区、堆区、栈区以及
常量
区。他们的功能不同,对他们使用方式也就不同。 在C++中内存分成5个区,分别是堆、栈、全局/静态存储区、
常量
存储区和代码区; 内存四区是指:栈区,堆区,...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章