c/c++如变量内存何时会回收?

来源:百度知道 编辑:UC知道 时间:2024/05/23 02:15:52
char* str()
{
char *st ="this is a string!";
return *st;
//小弟初学C,我不知道怎么返回一个字符指针。忘大家指正一下。
}

main()
{
printf(str());
}

比如说上面的代码可以返回一个字符串的指针地址。
字符串我是在str函数中定义的。它何时会被回收呢?
是在str函数结束后吗?如果不是的话这块内存又是何时被回收的呢?还是要我们自己销毁它呀?
最后麻烦大家告诉我,函数怎么可以返回一个字符串的首地址。
一楼的朋友,如果是函数结束以后的话,那我函数的返回值不就不可以在main函数中使用了吗?
`
`
`
`
好人啊.回答的很详细!非常感谢大家.为达谢大家,再追加10分!一点意思!!
大家的答案都挺好的,还是投票选举吧!!
`
`
`

没错。str函数结束后它的局部变量就销毁了。
一般是不能返回指针的,除非你在函数内部给它分配了内存
char *str = (char*)malloc(100);
strcpy(str, "this is a string");
return str;
不过如果这样做的话,你还要写一个对应的释放内存的函数,内容应该包括
free(str);

比较常见的做法,是在函数外部给指针分配好内存,然后把指针当成参数传给函数
char* strfun(char* str)
{
strcpy(str, "this is a string");
return str;
}

main()
{
char str[256];
strfun(str);
//some codes using str here
return 0;
}

函数结束以后,参看书上的 生存期 相关内容。

比如有这么个函数:

int test001()
{
int a=5; return a;
}

这里函数返回的是局部变量a的一个副本(或者称为一份拷贝),该副本仅在函数返回时有效。比如main函数里有这么一句:

int v1=test001();

计算机将a的副本赋值给v1之后,该副本立即被销毁。

-------------------------------------------------

你代码中的写法是错误的,即便你要返回字符指针,也应该这样写:

char* strtest()
{
char *st ="this is a string!";
return st; // 不是*st,*st是一个字符,而不是指针。
}

何时被销毁就不解释了,跟上面的例