社区
ATL
帖子详情
简单问题关于函数变量生存期....
C员外
2005-08-20 11:41:56
char* p = "12345";
char array[] = "12345";
在一个char* Fun()函数里,为什么返回 p与&array不一样
...全文
112
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开辟的空间在哪里或在那个段位?
C++
变量
的
生存期
变量
的
生存期
是指其在程序运行时占用内存空间的时间段。 1. 静态
生存期
从程序开始执行时分配到程序结束时收回。 如:全局
变量
2. 自动
生存期
从程序执行到定义它们的复合语句时分配到复合语句执行完毕时收回。 如:局部
变量
、
函数
的参数 3. 动态
生存期
用new操作或者malloc
函数
来进行分配,用delete操作或者调用free
函数
来收回。
变量
的作用域和
生存期
变量
的作用域:即
变量
的作用范围(有效范围)。 表现为
变量
有的可以在整个程序或其他程序中进行引用,有的则只能在局部范围内引用。 按其作用域范围可分为 局部
变量
和全局
变量
变量
的
生存期
:
变量
从生成到被撤销的这段时间。实际上就是
变量
占用内存的时间。 按其
生存期
可分为 动态
变量
和静态
变量
变量
只能在其
生存期
内被引用,而
变量
的作用域直接影响
变量
的
生存期
。 局部
变量
的作用域和
生存期
在
函数
...
【C语言】
函数
中
变量
及
变量
的
生存期
目录一、局部
变量
和全局
变量
1.局部
变量
2.全局
变量
二、
变量
的存储方式和
生存期
1.动态存储和静态存储2.局部
变量
的存储类别 3.全局
变量
的存储类别 定义
变量
可能有3种情况: (1)在
函数
的开头定义; (2)在
函数
内的复合语句内定义; (3)在
函数
的外部定义。 在一个
函数
内部定义的
变量
只在本
函数
范围内有效,也就是说只有在本
函数
内才能引用它们,在此
函数
以外是不能使用这些
变量
的。在复合语句内定义的
变量
只在本复合语句范围内有效,只有在本复合语句内才能引用它们。在该复合语句以外是不能使用这些
变量
的,以上
C语言中
变量
的作用域和
生存期
的区别
变量
的作用域与
生存期
一、
变量
的作用域1.基本概念2.代码分析3.总结二、
变量
的
生存期
1.基本概念2.C语言的内存分布(1)基本概念(2)数据在内存中的分布3.总结 一、
变量
的作用域 1.基本概念 作用域的域英文翻译为scope,作用域即作用范围。作用域关键在于域,作用域影响的是访问权限,出了作用域就无权访问了。 关于域: (1)有基于整体项目的域,可以做到整个项目的全局特性,我们称之为全局
变量
; (2)有基于文件的域,可以做到文件内全局特性,只能在文件内部访问,我们称之为静态全局
变量
; (3)有基于
函数
的域
c语言
函数
变量
的作用域与
生存期
c语言
函数
的作用域与
生存期
ATL
3,248
社区成员
48,530
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章