文字常量的生存期问题?

cxd306021 2005-07-04 12:24:21
请问文字常量的生存期是咋样?
char *Func(void)
{
char str[]="hello world";//
}
...全文
386 9 打赏 收藏 转发到动态 举报
写回复
用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 释放内存。动态内存的生存
期由我们决定,使用非常灵活,但问题也最多。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧