求救 输出的是什么? 为什么?
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
char *g(void)
{
char p[]="hello world";
return p;
}
void main()
{
char *q=NULL;
q=g();
printf ("%s",q);
}
[解决办法]
g函数中的p是局部变量,出了g函数就不在有效
[解决办法]
输出的不知道。你的指针是在栈里面的。g函数返回后那段内存就被回收了。所以你的指针成了野指针。所以输出什么不知道了
[解决办法]
[return p;]warning C4172: 返回局部变量或临时变量的地址
输出乱码!
[解决办法]
lz是用一个字符串常量来初始化一个字符数组,所以p是栈中的数组,虽然按值返回数组地址,但打印时数组已经被销毁了。
如果改成
char *p = "hello world";
[解决办法]
我想不会正确输出。因为被调用函数执行结束后,数组p作为局部变量会被系统自动释放,因此不能返回到主函数中。如果你在被调用函数中采用动态申请空间,然后返回指针,那么可以正确输出;因为动态申请的空间是在堆上申请的,被调用函数执行结束后堆上的空间不会被自动释放,需要你在主函数中手动释放--free();
[解决办法]
为什么是个常量?我有点没懂,常量不是要加上const么?