指针与函数指针

指针定义: int *p;  (int *)合为一体作为类型名,p是变量名,*除了在定义指针时,均作取值操作,取对应地址里存放的值。

指针赋值:

int c,d,*a=&c,*b=&d;
a=b;//把b中存的地址给a

指针常量与常量指针:

int * const p 这个指针是个常量(从左往右读就行,指针(int *)常量(const))

const int *p 这个指针指向常量(从左往右读就行)

函数名与函数指针

函数名就是一种函数指针常量,不可以被赋值,同理还有数组名。 定义的函数指针是函数指针变量,他可以任意赋值指向任何同类型函数(返回值和参数类型一样)。所以从根本出发,还存在这样一种函数调用方式

void MyFun(int x)  //这里定义一个MyFun函数
{
   printf(“%d\n”,x);
}
int main()
{
   (*Myfun)(10);
}

但是为了方便,C语言规则允许 Myfun(10)这种写法,在此之上为保持同一,函数指针也被允许这样的调用方式

void (*pfunc)(int)

void MyFun(int x)  //这里定义一个MyFun函数
{
   printf(“%d\n”,x);
}

int main()

{

        pfunc=Myfun;

        pfunc(10);

}

 同理也可以(*pfunc)(10);这样调用,

总结一下,就是说调用时*可加可不加。

 赋值时,既可以FunP=&MyFun形式,也可FunP=MyFun

但是在定义时需注意,*加不加要按规范写法

void MyFun(int );    //不能写成void (*MyFun)(int )。
void (*FunP)(int );   //不能写成void FunP(int )。

 另外关于函数声明和函数指针声明的在形式上

void MyFun(int x);    //这个申明也可写成:void MyFun( int );
void (*FunP)(int );   //也可申明成void(*FunP)(int x),但习惯上一般不这样。

函数或函数指针都能作为函数参数

见文末

void   show(FUNC2 *fun,int   arg1,   int*arg2)
//void   show(FUNC2 fun,int   arg1,   int*arg2)//这里做这样的声明也一样是对的

这两种声明方式都是对的,

作者的观点是void   show(FUNC2 fun,int   arg1,   int*arg2)使用一个函数做为形式参数,调用时传递一个函数名字给他就可以,也可以传递一个函数常量指针。类比于使用指针常量或者数组作函数书参数的时候。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值