首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

函数返回值为什么不会存在?该怎么处理

2012-03-19 
函数返回值为什么不会存在???#includestdio.h#includestdlib.h#includestring.hchar*strsave(char*s

函数返回值为什么不会存在???
#include   <stdio.h>
#include   <stdlib.h>
#include   <string.h>

char*   strsave(char*   s)
{
//第一种情况   可以return
/*
char*   p   =   new   char(10);
strcpy(p, "abc ");
*/

//第二种情况     不可以return
char   p[10]   =   { 'a ',   'b ',   'c '};

return   p;
}
void   main(void)
{
char*   str   =   "China ";
char*   cp;
cp   =   strsave(str);
printf( "str   =   %s   ,   cp   =   %s\n ",   str,   cp);
}

[解决办法]
char* p = new char(10);
在堆内动态分配数据,一旦分配,一定要用delete才能清除数据,否则数据信息一直保留

char p[10] = { 'a ', 'b ', 'c '};
在栈内分配,只在作用域内有效,出了作用域就消失

[解决办法]
new 是超出一般性质的作用域的申请内存的方法.
也就是new后,语言不管理你这个内存空间,而是你自己去管理.

除此之外,语言的特性会自动的帮你回收掉一些内存空间.

void fun()
{
int i; // 这里的i 的内存空间申请了
}
// 在外面就被释放了.
//这个就是所谓的作用域的生命周期, 也就是超出作用域会释放掉的内存空间.

作用域分为(不标准命名):
1.函数作用域,就是函数范围,跳出函数就释放掉
2.表达式作用域, 就是一个表达式申请,超出这个表达式就删掉的内存
3.程序作用域, 程序结束就释放掉的内存.

要注意的是,虽然有这些作用域限制,但是并不是非要用new才能传递变量.只要将内部范围的变量
复制到外部范围就能传递了.但是话说回来,数组是不能直接复制的,数组名传递的是他的地址,而用
这个访问的还是原来的空间,这就会出现问题.


热点排行