作者ric2k1 (Ric)
看板EE_DSnP
标题Re: [问题] function pointer
时间Sun Dec 16 22:16:02 2007
※ 引述《popo4231 (小泰)》之铭言:
: 想问一下function pointer解参考之後是什麽东西
: 我试着将funtion ptr前面放很多个*结果好像并不会error
: 而且作用上并没有问题
: code:
: #include<iostream>
: using namespace std;
: int add(int a,int b)
: {
: return a+b;
: }
: int sub(int a,int b)
: {
: return a-b;
: }
: int addorsub(int a,int b,int (*operate) (int,int)) // function pointer
: {
: return operate(a,b);
: }
: int main()
: {
: int (*FUNPTR[2])(int,int)={add,sub};
: cout<<(*****FUNPTR[0])(10,5)<<endl;
: cout<<(*add)(10,5)<<endl;
: cout<<(**add)(10,5)<<endl; // 到底function pointer解参考之後是啥东西 ?
: cout<<addorsub(5,3,FUNPTR[0])<<endl;
: cout<<addorsub(5,3,FUNPTR[1])<<endl;
: system("pause");
: return 0;
: }
在 funtion pointer 的使用上, (*add)(10, 5) 与 add(10, 5) 都可以 refer 到
add 这个 funtion (的开始位置),
也就是说 (*add) 与 (add) 其实是一样的意思,
所以 (不是很正式的证明) ---
(**add) = (*(*add)) = (*add) = (add) = add
不过我是觉得这也可能是 compiler or C++ language 的漏洞,
搞不好以後的标准就不允许加那麽多星了...
所以, 正常用(operate(a, b) or (*operate)(a, b) )就好.
至於一般的指标变数, *p != p, 所以当然不会有这种情况了.
另外, 一般变数应该是可以三颗星以上吧?
例如说:
int ***p = new int **[3];
p[0] = new int *[10]; // p[0] is an int **
(*p)[0] = new int[5]; // (*p) = p[0], so here (*p)[0] = p[0][0] is an int*
(**p)[0] = 8; // (**p) = p[0][0], so here (**p)[0] = p[0][0][0] is an int
cout << ***p << endl; // print out '8'
小心不要搞错参照到第几颗星了...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.121.134.219