社区
ATL
帖子详情
简单问题关于函数变量生存期....
C员外
2005-08-20 11:41:56
char* p = "12345";
char array[] = "12345";
在一个char* Fun()函数里,为什么返回 p与&array不一样
...全文
79
8
打赏
收藏
简单问题关于函数变量生存期....
char* p = "12345"; char array[] = "12345"; 在一个char* Fun()函数里,为什么返回 p与&array不一样
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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开辟的空间在哪里或在那个段位?
全局
变量
及其作用域和
生存期
函数
的存储分类PPT课件.pptx
全局
变量
及其作用域和
生存期
函数
的存储分类PPT课件.pptx
全局
变量
及其作用域和
生存期
函数
的存储分类学习教案.pptx
全局
变量
及其作用域和
生存期
函数
的存储分类学习教案.pptx
php基础入门
函数
概念 用户自定义
函数
可变
函数
函数
的参数
函数
体及
函数
返回值
函数
的调用(作用域) 匿名
函数
局部静态
变量
递归
函数
迭代 ..............................................................................
全局
变量
及其作用域和
生存期
函数
的存储分类PPT学习教案.pptx
全局
变量
及其作用域和
生存期
函数
的存储分类PPT学习教案.pptx
【C语言】
函数
中
变量
及
变量
的
生存期
全局
变量
二、
变量
的存储方式和
生存期
1.动态存储和静态存储2.局部
变量
的存储类别 3.全局
变量
的存储类别 定义
变量
可能有3种情况: (1)在
函数
的开头定义; (2)在
函数
内的复合语句内定义; (3)在
函数
的外部定义。 在一...
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章