Ngo*_*han 7 c++ memory function-pointers
我写了一些代码来了解函数指针是如何工作的.我在一些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;
}
Run Code Online (Sandbox Code Playgroud)
我的问题:
s.pt_1 == s.pt_2 == *s.pt_1 = **s.pt_1 ?s.pt_1()指向何处?它在内存中的位置?与使用数组的名称类似,使用函数的名称将使其在最轻微的刺激下退化为指针。
s.pt_1 = function;
Run Code Online (Sandbox Code Playgroud)
这里function衰减为指向函数的指针。
s.pt_2 = &function;
Run Code Online (Sandbox Code Playgroud)
在这里,您实际上获取了函数的地址,这会产生与第一种情况相同的指针。
printf("%x\n",s.pt_1); //Result: 0x013011a9
printf("%x\n",*s.pt_1); //Result: 0x013011a9
printf("%x\n",**s.pt_1); //Result: 0x013011a9
Run Code Online (Sandbox Code Playgroud)
第一行pt_1是一个指向函数的指针,并显示指针中存储的地址。
在第二行,您取消引用指针并访问函数本身。当传递给函数时,它会衰减为指针。
在第三行,您取消引用指针以获取函数,然后当您将其与另一个 .txt 文件一起使用时,该函数将衰减为指针*。第二个星号产生的值在传递给函数时再次衰减为指针。ETC。