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

比如:char*f(){...},返回的那个char*比如说是一个字符串,那么这个字符串一定是在函数里的局部变量,在函数调用完后,该指针指的内存就废弃了,返回的指针其实就... 比如:char *f(){...},返回的那个char *比如说是一个字符串,那么这个字符串一定是在函数里的局部变量,在函数调用完后,该指针指的内存就废弃了,返回的指针其实就是没用的。但是在string.h 中,就有返回指针的函数,比如subString,那个是怎么做到得 展开
 我来答
鷹弈
2011-09-29 · TA获得超过5194个赞
知道大有可为答主
回答量:1257
采纳率:0%
帮助的人:621万
展开全部
这种方式叫做“用指针函数*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申请的内存是在堆上创建的

这是三种不同内存分配的方式
wanbo821
2011-09-29 · 超过31用户采纳过TA的回答
知道答主
回答量:641
采纳率:0%
帮助的人:336万
展开全部
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,求解释
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友35f20c5
2011-09-29
知道答主
回答量:28
采纳率:0%
帮助的人:12.8万
展开全部
在subString中定义一个局部变量指针,比如p,该指针指向 传入subString的指针入参,这个入参是在调用subString的函数中定义的数组之类的,然后在subString中返回p就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
melancholy_444
2011-09-29 · TA获得超过390个赞
知道小有建树答主
回答量:416
采纳率:0%
帮助的人:339万
展开全部
可以用malloc, calloc等申请一段内存空间,除非你手动free掉,否则这段空间一直存在。空间的大小很重要,弄错会有越界危险
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ku20113233052
2015-09-09 · TA获得超过236个赞
知道小有建树答主
回答量:119
采纳率:100%
帮助的人:106万
展开全部
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)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式