关于数组和指针返回值的疑问解决方案
关于数组和指针返回值的疑问对于函数char *GetString(void){char p[] hello worldreturn p}和char *
关于数组和指针返回值的疑问
对于函数
char *GetString(void)
{
char p[] = "hello world";
return p;
}
和
char *GetString(void)
{
char *p = "hello world";
return p;
}
第一个出现乱码,第二个正确
是不是这么理解的:第一个函数中p在定义时指向了一块内存,char p[] = "hello world";
之后,是将hello world复制到p指向的内存中,但是由于该内存是栈内存,所以返回的p指向乱码。
第二个函数的p定义时就指向hello world所在的静态区的内存首地址,所以返回的是静态区的内存首地址,所以不会变,都是hello world
[解决办法]
第一个函数中的 p数组变量 的内容 为栈内存 当函数调用之后 释放掉.如果有别的函数占了这块内存,则会出现乱码.也就是说你函数返回的是已经被释放掉的一块内存地址.
[解决办法]
[解决办法]第一个是栈内存,离开作用域就消失了,指针就变成野指针
[解决办法]lz 的理解差不多都是正确的。
[解决办法]char*指向字符串常量首址.
[解决办法]LZ正解
LZ可以分别打印下两个char *的地址,静态地址一般是在高端,栈在低端
[解决办法] 你的理解是正确的
[解决办法]GOT IT
[解决办法]第一个函数是先分配一个字符串"hello world"长的字符数组空间,将这一字符串复制到此处,函数执行结束,释放该空间,返回的是一个被释放掉的空间地址;第二个函数没有空间申请,返回的是字符串所在地址。