C/C++能否返回局部变量
2017-03-25 17:07
204 查看
1.C/C++能返回static修饰的局部变量(因为在静态存储区)
2.C/C++能返回用 new 创建的局部变量(因为在堆空间)
3.C/C++能返回指向常量的指针,但不能返回指向普通局部变量的指针,否则返回的是乱码(因为后者创建在栈空间)
4.C/C++能返回局部变量的值
预备知识: 1.当函数结束时,在栈空间的该函数的普通局部变量会被释放(清除)。
2.普通的局部变量是在 栈空间 生成的,所以但程序结束时,局部变量也会被清空。
1.C/C++能返回static修饰的局部变量(因为在静态存储区)
用static 修饰的变量是存储在静态存储区,而不是栈空间
下面的例子是错误的。
而用static修饰后,就能成功打印出hello world,因为static修饰,就表示修饰的对象是创建在静态存储区,不受栈空间影响
2.C/C++能返回用 new 创建的局部变量(因为在堆空间)
用 new 创建的变量是存储在 堆空间
3.C/C++能返回指向常量的指针,但不能返回指向普通局部变量的指针(因为后者创建在栈空间)
4.C/C++能返回局部变量的值
2.C/C++能返回用 new 创建的局部变量(因为在堆空间)
3.C/C++能返回指向常量的指针,但不能返回指向普通局部变量的指针,否则返回的是乱码(因为后者创建在栈空间)
4.C/C++能返回局部变量的值
预备知识: 1.当函数结束时,在栈空间的该函数的普通局部变量会被释放(清除)。
2.普通的局部变量是在 栈空间 生成的,所以但程序结束时,局部变量也会被清空。
1.C/C++能返回static修饰的局部变量(因为在静态存储区)
用static 修饰的变量是存储在静态存储区,而不是栈空间
下面的例子是错误的。
char *fun() { char p[]="hello world"; return p; } int main() { char *s = fun(); cout<<s<<endl; return 0; }//print:乱码因为 p 相当一个数组头指针,他的内容都是在栈空间的,所以当 return p后,p是能成功传出去的,但其指向的内容已经被栈空间清除了,因此打印的是乱码。
而用static修饰后,就能成功打印出hello world,因为static修饰,就表示修饰的对象是创建在静态存储区,不受栈空间影响
char *fun() { static char p[]="hello world"; return p; } int main() { char *s = fun(); cout<<s<<endl; return 0; }//print:hello world
2.C/C++能返回用 new 创建的局部变量(因为在堆空间)
用 new 创建的变量是存储在 堆空间
int fun() { int *a = new int; *a = 100; return *a; } int main() { int num = fun(); cout<<num<<endl; return 0; }//print:100
3.C/C++能返回指向常量的指针,但不能返回指向普通局部变量的指针(因为后者创建在栈空间)
char *fun() { char *p="hello world"; //hello world 是字符串常量,生成在常量存储区,所以指针p是指向常量存储区 return p; } int main() { char *s = fun(); cout<<s<<endl; return 0; }//print:hello world下面的代码是指针指向普通局部变量的情况:
char *fun() { char p[]="hello world"; //定义一个数组,并赋值。数组p 是在栈空间 return p; } int main() { char *s = fun(); cout<<s<<endl; return 0; }//print: 乱码
4.C/C++能返回局部变量的值
int fun() { int a = 100; return a; } int main() { int num = fun(); cout<<num<<endl; return 0; }//print: 100在函数返回中,return 后跟的东西是一定能返回出去的,这就是 局部变量的返回能值返回的原因,而地址返回(也就是指针)则看情况,要看他所指向的地方是否已经被释放掉。
相关文章推荐
- c++返回局部变量的指针
- 【C++基础之三】函数中局部变量的返回
- C++函数返回局部变量
- c++ 返回局部变量的指针--策略
- C++编程经验-返回局部变量的讨论
- C++编程经验-返回局部变量的讨论
- C++函数能否返回多个值?
- 【C++基础之三】函数中局部变量的返回
- 关于 C++ 函数返回局部变量的警告
- C++函数传指针引用,以及函数返回局部变量
- C++不可以返回局部变量的引用或指针
- C++编程经验-返回局部变量的讨论
- C++的那些秘密---函数返回局部变量
- 实战c++中的string系列--函数返回局部变量string(引用局部string,局部string的.c_str()函数)
- C/C++ waring:返回局部变量或临时变量的地址
- C++关于不能返回局部变量的指针的研究
- C++返回局部变量的指针问题
- 实战c++中的string系列--函数返回局部变量string(引用局部string,局部string的.c_str()函数)
- C++编程经验-返回局部变量的讨论
- C++编程经验-返回局部变量的讨论(转)