函数指针
写出函数指针、函数返回指针、const指针、指向const的指针、指向const的const
指针。
答案:
找出下面程序的错误,并解释它为什么是错的。[中国台湾某著名杀毒软件公司2005年
10月面试题]
解析:这道程序体存在着函数指针的错误使用问题。
答案:
正确的程序如下:
下面的数据声明都代表什么?[美国某著名计算机嵌入式公司2005年9月面试题]
(1)float(**def)[10];
(2)double*(*gh)[10];
(3)double(*f[10])();
(4)int*((*b)[10]);
(5)Long (* fun)(int)
(6)Int (*(*F)(int,int))(int)
解析:函数指针的问题。
就像数组名是指向数组第一个元素的常指针一样,函数名也是指向函数的常指针。可以
声明一个指向函数的指针变量,并且用这个指针来调用其他函数——只要这个函数和你的函
数指针在签名、返回、参数值方面一致即可。
上面就是一个函数指针——指向函数的指针,这个指针返回值是long,所带的参数是
int。如果去掉(* fun)的“()”它就是指针函数,是一个带有整数参量并返回一个长整型变量的
指针的函数。
如上所示,F是一个指向函数的指针,它指向一种函数(该函数参数为int,int返回值为
一个指针),返回的这个指针指向的是另外一个函数(参数类型为int,返回值为int类型的函
数)。
答案:
(1)float(**def)[10];
def是一个二级指针,它指向的是一个一维数组的指针,数组的元素都是float。
(2)double*(*gh)[10];
gh是一个指针,它指向一个一维数组,数组元素都是double*。
(3)double(*f[10])();
f是一个数组,f有10个元素,元素都是函数的指针,指向的函数类型是没有参数且返回
double的函数。
(4)int*((*b)[10]);
就跟“int* (*b)[10]”是一样的,是一维数组的指针。
(5)Long (* fun)(int)
函数指针。
(6)Int (*(*F)(int,int))(int)
F是一个函数的指针,指向的函数的类型是有两个int参数并且返回一个函数指针的函
数,返回的函数指针指向有一个int参数且返回int的函数。