C语言怎么让一个函数返回指针

比如:char *f(){...},返回的那个char *比如说是一个字符串,那么这个字符串一定是在函数里的局部变量,在函数调用完后,该指针指的内存就废弃了,返回的指针其实就是没用的。但是在string.h 中,就有返回指针的函数,比如subString,那个是怎么做到得

这种方式叫做“用指针函数*creat()的返回值来传递动态内存”,这是一个C语法

首先你要注意,子函数*creat()用了malloc动态申请内存,而return返回的是指针变量所指向的地址,而不是指针!相当于将你所申请的动态内存返回给主函数

int *fun(void)//这里是指针函数
{
int *p = (int *) malloc (int);//动态申请内存//p在这里指向了一块合法内存的地址
return p;
}

void main(void)
{
int *q = NULL;
q = fun();//fun()返回指针p所指向的地址,(指针p是在栈上创建的,所以*fun()函数运行完,指针所分配的内存被系统自动释放)这时q指向p,得到了malloc所申请到的内存
free(q);//释放动态内存
}追问

我知道,但是在C中,数组名和指针时同样的待遇,那为什么我那个例子中,char c1[]="hello";不能得到正常结果?其实我刚开始的问题问偏了,现在发现问题就是这个问题

追答

我强调一遍是返回指针指向的地址,指针!指针!指针!,数组名和指针有同样的待遇???
你那数组名给我指个合法内存让我看看???

*p = "hello"这是常量字符串,从静态存储区分配,第一步字符串"hello"从静态存储区获取一块内存,然后指针变量p才指向这块静态内存,这块内存的特点是从程序开始到结束一直从在,所以可以返回。

c[] = “hello"是在栈上创建的,只要子函数fun()运行完毕,这块内存就自动被系统释放,怎么能给你返回呢???语法就是错误的!

malloc申请的内存是在堆上创建的

这是三种不同内存分配的方式

追问

谢谢大神,请问QQ号,希望能与你结交。我的137830134

追答

121590680

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-29
MYTYPE *p(int); //你这是声明了函数p 返回值是一个MYTYPE指针 //如果要声明为函数指针如下: MYTYPE* (*p)(int);//括号不能少 在四个子追问

#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,求解释

第2个回答  2011-09-29
在subString中定义一个局部变量指针,比如p,该指针指向 传入subString的指针入参,这个入参是在调用subString的函数中定义的数组之类的,然后在subString中返回p就行了。
第3个回答  2011-09-29
可以用malloc, calloc等申请一段内存空间,除非你手动free掉,否则这段空间一直存在。空间的大小很重要,弄错会有越界危险
第4个回答  2015-09-09
C语言属于高级编程语言。
在C语言中一个函数不能返回局部地址即指针。
例:
int * func(void)

int a= 10;

int *p = &a;

return p;


a变量的区域是func()函数,在函数内有效,出了函数就释放了,此时p指向的是一个未知
地址,属于错误用法。
正确用法:

int *p = NULL;

int * func(void)

p = malloc(sizeof(int));

if(p!=NULL)

{
*p = 10;

}
return p;



p的作用域是全局的,最后记得free(p)。
相似回答