社区
ATL
帖子详情
简单问题关于函数变量生存期....
C员外
2005-08-20 11:41:56
char* p = "12345";
char array[] = "12345";
在一个char* Fun()函数里,为什么返回 p与&array不一样
...全文
84
8
打赏
收藏
简单问题关于函数变量生存期....
char* p = "12345"; char array[] = "12345"; 在一个char* Fun()函数里,为什么返回 p与&array不一样
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
i_noname
2005-08-21
打赏
举报
回复
"c...parray"是静态数据,放在数据区data segment所以不用释放
但是这样的话只可以通过pc指针来获取它的值但是不能改变它
i_noname
2005-08-20
打赏
举报
回复
这个要看编译器怎么做的,有的编译器会合并相同的字符串,但有的不会,所以在不同编译器下结果可能就不一样
char* p = "12345";
char array[] = "12345";
在VC下p和array应该相同。
另外,你使用这个函数的时候小心,因为
char* p = "12345";
char array[] = "12345";
中,"12345"是放在静态变量区而不是在堆里面,也就是说,"12345"的值是固定的不能改变。
如果你想用p或array改变变量的值就会出错!
例如p[0] = 'a'这样的赋值是不允许的
C员外
2005-08-20
打赏
举报
回复
可 char *pc = "c...parray";并不需要释放.那位高人再解释一下?
i_noname
2005-08-20
打赏
举报
回复
没错。如果用了
char *pc = "xxxxx";
就一定要
free(pc);
否则内存泄漏
C员外
2005-08-20
打赏
举报
回复
如果char *pc = new ...or malloc..的话,可以delete/free()的.
C员外
2005-08-20
打赏
举报
回复
char *pc = new ...则在堆上,那么就必须delete/free()否则leak?但就算free(),其还在阿.
应在可执行文件的数据区吧
i_noname
2005-08-20
打赏
举报
回复
GetFromArray中,数组是储存在栈内,函数执行完后数组被释放,所以返回数组名是无意义的。
GetFromPointer中,
char *pc = "c...parray"
等效于
char *pc = new ...
所以有效。
C员外
2005-08-20
打赏
举报
回复
对于返回array在gcc/aCC及vc下都不行的.
char* GetFromArray()
{
char cArray[20] = "c....array ";
return cArray;
}
char* GetFromPointer()
{
char *pc = "c...parray ";
return pc;
}
GetFromArray()函数返回是乱码,而GetFromPointer()没问题,那么pc与cArray开辟的空间在哪里或在那个段位?
C语言题库-
函数
.pdf
C语言题库-
函数
.pdf
全局
变量
及其作用域和
生存期
函数
的存储分类学习教案.pptx
全局
变量
及其作用域和
生存期
函数
的存储分类学习教案.pptx
【C语言】
函数
中
变量
及
变量
的
生存期
目录一、局部
变量
和全局
变量
1.局部
变量
2.全局
变量
二、
变量
的存储方式和
生存期
1.动态存储和静态存储2.局部
变量
的存储类别 3.全局
变量
的存储类别 定义
变量
可能有3种情况: (1)在
函数
的开头定义; (2)在
函数
内的复合语句内定义; (3)在
函数
的外部定义。 在一个
函数
内部定义的
变量
只在本
函数
范围内有效,也就是说只有在本
函数
内才能引用它们,在此
函数
以外是不能使用这些
变量
的。在复合语句内定义的
变量
只在本复合语句范围内有效,只有在本复合语句内才能引用它们。在该复合语句以外是不能使用这些
变量
的,以上
C++
变量
的
生存期
变量
的
生存期
是指其在程序运行时占用内存空间的时间段。 1. 静态
生存期
从程序开始执行时分配到程序结束时收回。 如:全局
变量
2. 自动
生存期
从程序执行到定义它们的复合语句时分配到复合语句执行完毕时收回。 如:局部
变量
、
函数
的参数 3. 动态
生存期
用new操作或者malloc
函数
来进行分配,用delete操作或者调用free
函数
来收回。
函数
变量
和
生存期
定义
变量
有三种形式:(1)在
函数
的开头定义;(局部
变量
)(2)在
函数
内的复合语句定义;(局部
变量
)(3)在
函数
的外部定义;(全局
变量
)局部
变量
与全局
变量
同名,优先使用局部
变量
。
ATL
3,248
社区成员
48,529
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章