从本章中让我深刻的理解了函数指针和类型的转换。本人理解有限,希望指教!
任何c变量的声明都是两部分构成,类型和表达式的声明符。
例如:
float是类型,a,b是声明符。
(*fp)()就是调用该函数的方式。
接下来fp 的适当表达方式如下:
对0做类型转换
因此可用(void (*)())0 来替代fp
任何c变量的声明都是两部分构成,类型和表达式的声明符。
例如:
float a,b;
float是类型,a,b是声明符。
float *p; //p是指向浮点型数的指针
float *g(),(*h)(); // *g()是指针函数,函数的返回值必须由指针变量接受(*h)()是函数指针,该指针指向相同类型的函数首地址。
类型转化符:只要把声明中的变量名和声明末尾的分号去掉,再将剩余的部分用一个括号整个封装即可。
float (*h)(); //h 是一个函数指针,h指向的函数的返回值为浮点型。
(float (*)());//表示一个指向返回值为浮点类型的函数指针的类型转换符。
硬件调用首地址为0的子程序
(*(void(*)())0)();
(void ( * )( )); //是一个类型转换符,假设还原回去 void ( *fp )(); //fp是一个函数指针,该指针指向一个函数函数值为void的函数首地址。
(*fp)()就是调用该函数的方式。
接下来fp 的适当表达方式如下:
( *0)( ); //这个式子无效,因为*是指针操作符,而且这个指针还应该是函数指针,这样运算后的结果才能作为函数被调用。
对0做类型转换
(void(*)())0 //将常数0转换为指向返回值为void类型的函数指针类型。
因此可用(void (*)())0 来替代fp