指针作为函数的返回值
在C语言中,地址也可以作为一个返回值,被函数返回。
但值得注意的是,不能在实现函数时返回在函数内部定义的自动变量的地址。因为作为自定义函数的局部变量,在函数返回时就会自动消亡,其储存单元不再有效。
因此,返回指针的函数一般都返回主调函数或者静态存储区中变量的值,值得一提的是,在函数中是通过动态内存分配方式建立的内存单元,其地址也可以正常返回。
#include "stdio.h"
char *find(char *s,char ch);
int main(void)
{
char ch,a[10];
char *p;
printf("please inter your word\n");
scanf("%s",a);//%s会吸收换行符;
getchar();
printf("please inter your letter\n");
ch=getchar();
p = find(a,ch);
if(p!=NULL)
{
printf("%s",p);
} else{
printf("Not found");
}
return 0;
}
char *find(char *s,char ch)
{
while (*s!='定义格式:')
{
if(ch==*s)
{
return s;
} else
{
s++;
}
}
return NULL;
}
函数指针:
在c语言中,函数名代表函数的入口地址,可以定义一个指针变量,接受函数的入口地址,让它指向函数,这就是指向函数的指针,也叫函数指针。
类型名(*变量名)(参数类型表);
在使用函数指针前,要先对它进行赋值,将一个函数名赋给函数指针,但要注意函数返回值的类型应该与函数指针的类型一致。
int (*p)(int int);
int fum(int int);
p=fum;
fum等价与*p
#include "stdio.h"
#include "math.h"
double f1(double x);
double f2(double x);
double calc(double (*p)(double ),double a,double b);
int main(void)
{
double result;
double (*p)(double );
result= calc(f1,0.0,1.0);
printf("%f\n",result);
p=f2;
result= calc(p,1.0,2.0);
printf("%f\n",result);
return 0;
}
double f1(double x)
{
return (x*x);
}
double f2(double x)
{
return (sin(x)/x);
}
double calc(double (*p)(double ),double a,double b)
{
double z;
z=(b-a)/2*((*p)(a)+(*p)(b));
return z;
}
形式:int *p(int int);
函数指针与指针函数的差别
指针函数:是一个函数,其返回值为指针;
形式:int (*p)(int int);
函数指针:是一个可以指向函数的指针;
()的优先级是高于*的,所以在指针函数中,p会先和(int int)结合,形成一个函数。与数组指针与指针数组。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)