关于理解指针与函数

函数指针

函数也存在地址

#include<stdio.h>

void fun()
{
prinft("fun");
}

int main()
{
prinft("fun=%p\n",&fun);
printf("fun=%p\n",fun);//输出两地址相同

fun();
(*fun)();//均输出“fun”,即均调用了函数,此时fun为函数指针
}

在函数中函数名和对函数取地址得到相同结果

int add(int a,int b)
{
return a+b;
}
int main()
{
int (*pfun)(int,int)=add;//根据函数来定义函数指针
int ret=(*pfun)(1,2);
//不能写成int ret=*pfun(1,2);,因为编译器会以为要解引用其返回
printf("%d",ret);

return 0;
}

int add(int a,int b)
{
return a+b;
}
int sub(int a,int b)
{
return a-b;
}
int operation(int (*pfun)(int ,int))
{
    int num1=0;
    int num2=0;
    scanf("%d%d",&num1.&num2);
    return pfun(num1,num2);
}
int main()
{
    int ret=operation(sub);//执行减法,传人add执行加法
    printf("%d",ret);
    return 0;

}

对应函数指针的数组

int fun(char *s,const char*c)
{
}
int fun1(char *s,const char*c)
{
}
int fun2(char *s,const char*c)
{
}
int main()
{
int (*pfun[4])(char *,const char *);//数组中每一个元素都是一个函数
pfun[0]=fun;
pfun[1]=fun1;
pfun[2]=fun2;
}


你可能感兴趣的:(C语言)