【发布时间】:2016-01-24 09:24:30
【问题描述】:
我写了一些代码来了解函数指针是如何工作的。 我在一些IDE上运行下面的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。 2.
operator()调用该函数,因此您正在使用它返回的指针。 -
通过
%x打印函数指针会调用未定义的行为,因为地址可能不适合int。使用printf("%p\n",(void*)s.pt_1); -
我在这里找到了第二个问题的答案Where in memory are return values stored in memory?
标签: c++ memory function-pointers