重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这种方式叫做“用指针函数*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);//释放动态内存
}
搞定
额 , 现在可以直接用b , 因为 数组 变量b 本身是不能修改的, 而且 函数结束后 b 的生命就结束了。
所以 我在 b的前面 加了static
for(i=r;*(ch+i)!='\0';i++) //找到 目标函数的结尾
for(j=0;j=i-r+1;j++) // i-r 是 从m到最后字符串的长度
*(b+j)=*(ch+r-1+j); //拷贝
char * x= b;
return x;
复制以下的
#includestdio.h
void main()
{
char a[20];int m=0;char*fuzhi(char*,int);
printf("输入字符:");
gets(a);
printf("输入起始位数:");
scanf("%d",m);
printf("%s\n",fuzhi(a,m));
}
char *fuzhi(char*ch,int r)
{static char b[20];int i,j;
for(i=r;*(ch+i)!='\0';i++)
for(j=0;j=i-r+1;j++)
*(b+j)=*(ch+r-1+j);
char * x= b;
return x;
}
C语言指向函数的指针承载的信息比较复杂,组织起来要素要写全。根据指向函数的指针的书写语法,下面的代码就是一个返回函数指针的函数:
int (*f(void))(int){//f是函数,没有参数,返回指向一个函数的指针;这个被指向的函数有一个int型形参,且返回一个int值
return fun;//fun是个函数名,必须具备一个int形参、返回int值的要求
}
以下代码可以验证上述函数的正确性:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int fun(int n){
printf("abcdef\n");
return n;
}
int (*f(void))(int){
return fun;
}
int main(void){
printf("%d\n",f()(100));//调用函数f,通过f返回的指针用100调用函数fun
return 0;
}
输出是:
abcdef
100
你的写法有问题...
char ele[200];
s=ele;
ele为函数内部定义的定长数组,等函数过程结束,对应的内存就会被自动释放,所以这样写是不对的
加了printf也不对,只是printf可能延迟了ele的释放