有关指针变量空间分配问题

monster_wang 2008-06-29 06:38:24
char *strf()
{
//char str[20]="0123456789";
char *str="0123456789";
return str;
}

void main()
{
printf("%s\n",strf());
}

strf()函数中两种变量定义方法,他们的变量空间分配是什么样的?
...全文
74 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2008-06-29
  • 打赏
  • 举报
回复
就弄清楚几个东西就行:

堆、栈、静态存储区域

堆:程序员掌控,包括new malloc delete等。
栈:计算机掌控,包括alloca int i; MyClass myclass等

静态存储区:计算机掌控,程序运行期间一直存在,包括:static、常量字符串等!
K行天下 2008-06-29
  • 打赏
  • 举报
回复
是,好像我弄错了,刚参考了CSDN技术中心:http://dev.csdn.net/article/53/53305.shtm


函数内的常量字符串是从程序静态存储区域分配的。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。这个概念一定要清楚,因为函数内的常量字符串的这个分配特性不向全局变量和static变量那样显而易见。
如在例1中
char *GetString(void)
{
char *p = "hello world";
return p;
}
这里的"hello world"是存储在静态存储区域,因此这里可以将其作为返回值。

monster_wang 2008-06-29
  • 打赏
  • 举报
回复
我试了下,char *str="0123456789"是可以的。
有人说str是分配在堆栈上,但是后面的变量是在全局区,是这样的吗?
K行天下 2008-06-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 franckson 的回复:]
第一种分配在栈上, 离开strf函数就被释放掉了,
第二种分配在全局区,离开strf函数不被释放, 等到程序结束时才被释放
[/Quote]
不对
都是在栈内分配内存!!!退出函数就释放了,你这样返回是不行的

要分配得用malloc在堆上动态分配内存空间
例如: char *str = (char*)malloc(20);
strcpy(str,"0123456789");
return str;
9527他大爷 2008-06-29
  • 打赏
  • 举报
回复
第一种分配在栈上, 离开strf函数就被释放掉了,
第二种分配在全局区,离开strf函数不被释放, 等到程序结束时才被释放

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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