函数返回值为什么不会存在???
#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才能传递变量.只要将内部范围的变量
复制到外部范围就能传递了.但是话说回来,数组是不能直接复制的,数组名传递的是他的地址,而用
这个访问的还是原来的空间,这就会出现问题.