指针难题!!!!!!
写出C的说明:
例如:x是有两个字符型参数的长整型函数。
解答:long x(char, char);
问:
d是有5个指针元素的数组,每个指针均指向有两个长整型参数、返回值为高精度型的函数。
作不出来。帮帮忙。
问题点数:100、回复次数:15Top
1 楼chinajiji(菜鸟叽叽)回复于 2003-01-04 00:16:42 得分 2
double (*d)(long, long) [5];Top
2 楼paul2002(Now 2006!)回复于 2003-01-04 00:25:48 得分 10
typedef double (*P)(long, long);
P arr[5];Top
3 楼redolive(红橄榄)回复于 2003-01-04 00:45:42 得分 2
不重复了,
上面的两个答案实质上都是一样的。
我支持。Top
4 楼yellowwolf(你们把名给全起了所以我注册色狼)回复于 2003-01-04 00:48:11 得分 10
typedef double(*P)(long,long);
P d[5];Top
5 楼hongfeeling(无烟亦如烟)回复于 2003-01-04 08:32:12 得分 2
就是上面的答案,两个都一样Top
6 楼lightning(lightning)回复于 2003-01-04 09:52:14 得分 2
以解决,
请勿回贴了.
哈哈Top
7 楼hedayu(天天打鱼)回复于 2003-01-04 10:51:04 得分 0
double (*d)(long, long) [5];
错误。因为此时d是一个指针,而不是数组。
typedef double (*p)(long, long);
p d[5];
正确。问题是可以把两个语句合并成一个语句吗?
Top
8 楼begincsdn(CNetware)回复于 2003-01-04 11:55:48 得分 30
//方法一:
typedef double(*pFunc)(long,long);
pFunc funcs1[5];
//方法二:
typedef double(*pFuncs[5])(long,long);
pFuncs funcs2;
//方法三:
double (*funcs3[5])(long,long);
Top
9 楼chinajiji(菜鸟叽叽)回复于 2003-01-04 11:58:33 得分 20
哈哈! 是这样的:
方法一(推荐方法,在实际工程中使用很多)
typedef double(*P)(long,long);
P d[5];
方法二(喜欢复杂和语法分析爱好者使用,如果是学习,看看可能有点帮助)
double (* d[5]) (long,long);
d是有5个指针元素的数组,每个指针均指向有两个长整型参数、返回值为高精度型的函数。
郑重声明:下面的写法是错误的!
double (*d)(long, long) [5];
d 是一个指向函数的指针,该函数返回一个有5个double元素的数组.
//double [5] (*d)(long, long) ;
//这样也错!
Top
10 楼begincsdn(CNetware)回复于 2003-01-04 11:58:36 得分 2
以上三种方案其实对于编译器来说是一种。
对于大家来说却是三种,呵呵。献丑啦。Top
11 楼chinajiji(菜鸟叽叽)回复于 2003-01-04 11:59:43 得分 10
下面是测试程序:
#include <iostream>
#include <stdlib.h>
using namespace std;
//!double (*d)(long, long) [5];
// d 是一个指向函数的指针,该函数返回一个有5个double元素的数组.
//double [5] (*d)(long, long) ;
//这样也错!
//方法一
//typedef double(*P)(long,long);
//P d[5];
//方法二
double (* d[5]) (long,long); //这才是对的!
double f1(long, long) {
cout << " calling f1()!" << endl;
return 0.0;
}
double f2(long, long) {
cout << " calling f2()!" << endl;
return 0.0;
}
double f3(long, long) {
cout << " calling f3()!" << endl;
return 0.0;
}
double f4(long, long) {
cout << " calling f4()!" << endl;
return 0.0;
}
double f5(long, long) {
cout << " calling f5()!" << endl;
return 0.0;
}
int main(int argc, char *argv[])
{
d[0] = f1;
d[1] = f2;
d[2] = f3;
d[3] = f4;
d[4] = f5;
for(int i = 0; i < 5; i++)
(d[i])(0,0);
system("PAUSE");
return 0;
}Top
12 楼chinajiji(菜鸟叽叽)回复于 2003-01-04 12:14:53 得分 10
说明:main函数中函数指针的获得与使用也可以这样:
d[0] = &f1;
d[1] = &f2;
d[2] = &f3;
d[3] = &f4;
d[4] = &f5;
for(int i = 0; i < 5; i++)
(*d[i])(0,0);
这叫显式法,如果是指向class内的成员函数,只能用显式法,并且还必须写上相关的class的域名:
class A {
public:
double f(long,long){};
};
int main() {
double (* A::p)(long,long);//显式法
p = &A::f;//显式法
A a;
A *pa = &a;
(a.*p).(0,0);
(pa->*p).(0,0);
return 0;
}
Top
13 楼ToUpdate(老六)回复于 2003-01-04 12:15:38 得分 0
UPTop
14 楼hedayu(天天打鱼)回复于 2003-01-04 16:19:01 得分 0
谢谢大家。Top
15 楼allen88680764(也不知为什么,爱上了编程,呵呵)回复于 2003-01-04 20:07:12 得分 0
double *d[5](long,long)Top




