有关数组和指针的一些有关问题
求助:有关数组和指针的一些问题
[code=C/C++][/code]
#include <stdio.h>
#include <string.h>
int main()
{
char *fun1();
printf("%s\n", fun1());
return 0;
}
char *fun1()
{
(1)// char str[]="ABC";
(2) char *str="ABC";
return (str);
}
如上代码所示:当fun1中使用(1)语句时打印出来的是乱码,使用(2)语句时能正确打印出来,为什么呢?
个人理解:虽然(1)中的str是局部变量,退出fun1的时候它的内存会被回收,但是里面的内容并没有被销毁,而fun1返回的是str,也就是数组的首地址,按理说再次调用的时候通过此地址还是能找回原内容的,但是为什么回打印出乱码呢?还是我的理解有误,希望前辈们不吝赐教。谢谢了。
------解决方案--------------------
传出局部对象的指针或引用都是危险的
[code=C/C++][/code]
#include <stdio.h>
#include <string.h>
int main()
{
char *fun1();
printf("%s\n", fun1());
return 0;
}
char *fun1()
{
(1)// char str[]="ABC";
(2) char *str="ABC";
return (str);
}
如上代码所示:当fun1中使用(1)语句时打印出来的是乱码,使用(2)语句时能正确打印出来,为什么呢?
个人理解:虽然(1)中的str是局部变量,退出fun1的时候它的内存会被回收,但是里面的内容并没有被销毁,而fun1返回的是str,也就是数组的首地址,按理说再次调用的时候通过此地址还是能找回原内容的,但是为什么回打印出乱码呢?还是我的理解有误,希望前辈们不吝赐教。谢谢了。
------解决方案--------------------
传出局部对象的指针或引用都是危险的
- C/C++ code
#include <stdio.h> int main() { char const *fun1(); printf("%s\n", fun1()); return 0; } char const *fun1() { return "ABC"; }
------解决方案--------------------
str是局部变量,退出fun1的时候它的内存会被回收,但是里面的内容并没有被销毁
那指针指向的就不能保证是什么值了,或许是正确,或许是乱码。
char *str="ABC";
这个不是存放在栈内存中,函数结束没有消失。
------解决方案--------------------