定义函数的指针,C++和C不同是因为函数重载
在C语言里,一个指针可以指向一个函数。这个指针也有两个属性,但一个是函数的入口地址,另一个是函数的返值类型。例如下面的程序,它在C语言里是正确的:int time12(int i)
{ return(i%12);
}
int main()
{ int(*fp)()=time12;
intt=fp(13);
return0;
}
主函数的第一句是一条定义语句。我们应从等号左边的标识符读起,等号左边出现的除了标识符以外都是类型的符号,读的顺序却要按照这个符号作为运算符时的运算级别来读。此句读作:fp是一个指针、它指向函数(注意,C语言允许其参数类型不写出)、这个函数的返值是int、这个指针被初始化为函数time12的入口地址。
然而,上述程序在C++里,第一条语句却被认为是有错误的。C++是强类型检查语言,这与C++的函数重载机制有关。C++要求必须指出函数的所有形式参数的类型。下列程序才是正确的C++程序:
int time12(int i)
{ return(i%12);
}
int main()
{ int(*fp)(int)=time12;
intt=fp(13);
return0;
}
补充:软件开发 , C++ ,