比如:char *f(){...},返回的那个char *比如说是一个字符串,那么这个字符串一定是在函数里的局部变量,在函数调用完后,该指针指的内存就废弃了,返回的指针其实就是没用的。但是在string.h 中,就有返回指针的函数,比如subString,那个是怎么做到得
我知道,但是在C中,数组名和指针时同样的待遇,那为什么我那个例子中,char c1[]="hello";不能得到正常结果?其实我刚开始的问题问偏了,现在发现问题就是这个问题
追答我强调一遍是返回指针指向的地址,指针!指针!指针!,数组名和指针有同样的待遇???
你那数组名给我指个合法内存让我看看???
*p = "hello"这是常量字符串,从静态存储区分配,第一步字符串"hello"从静态存储区获取一块内存,然后指针变量p才指向这块静态内存,这块内存的特点是从程序开始到结束一直从在,所以可以返回。
c[] = “hello"是在栈上创建的,只要子函数fun()运行完毕,这块内存就自动被系统释放,怎么能给你返回呢???语法就是错误的!
malloc申请的内存是在堆上创建的
这是三种不同内存分配的方式
谢谢大神,请问QQ号,希望能与你结交。我的137830134
追答121590680
#include
char *fun()
{
char c1[]="hello";
return c1;
}
void main()
{
char *p;
p=fun();
printf("%s\n",p);
}
运行结果不是hello,而如果我把char c1[]="hello";改为char *c1=“hello”;时运行结果才是hello,求解释