我寫了一些代碼來知道函數指針是如何工作的。 我在一些IDE上運行以下C++代碼,結果是一樣的。C++中函數指針的指針
#include "stdafx.h"
int *function(){
static int a=1;
return &a;
}
typedef struct{
int *(*pt_1)();
int *(*pt_2)();
}x_t;
int _tmain(int argc, _TCHAR* argv[])
{
x_t s;
s.pt_1 = function;
s.pt_2 = &function;
printf("%x\n",s.pt_1); //Result: 0x013011a9
printf("%x\n",*s.pt_1); //Result: 0x013011a9
printf("%x\n",**s.pt_1); //Result: 0x013011a9
printf("%x\n",s.pt_1()); //Result: 0x01307000
printf("%x\n",*s.pt_1()); //Result: 1
printf("%x\n",s.pt_2); //Result: 0x013011a9
printf("%x\n",*s.pt_2); //Result: 0x013011a9
printf("%x\n",**s.pt_2); //Result: 0x013011a9
printf("%x\n",s.pt_2()); //Result: 0x01307000
printf("%x\n",*s.pt_2()); //Result: 1
return 0;
}
我的問題:
-
- 爲什麼
s.pt_1 == s.pt_2 == *s.pt_1 = **s.pt_1
?
- 爲什麼
-
- 凡地址是否
s.pt_1()
點?它在哪裏找到內存?
1,請參閱[this](http://stackoverflow.com/questions/2795575/how-does-dereferencing-of-a-function-pointer-happen)。 2. operator()調用函數,所以你正在處理它的返回指針。 – LogicStuff
由'%x'打印函數指針會調用未定義的行爲,因爲地址可能不適合'int'。使用'printf(「%p \ n」,(void *)s。' –
我在這裏找到了第二個問題的答案[內存中的內存是否存儲在內存中的返回值?](http://stackoverflow.com/questions/5472008/where-in-memory-are-return-values -stored式存儲器) –