【发布时间】:2016-10-25 22:04:09
【问题描述】:
我了解数据项之类的函数具有地址,函数的地址是存储的函数的机器语言代码开始的内存地址。我有这个代码;
#include <iostream>
using namespace std;
int x(int);
char * y(char *);
int main() {
x(5);
y("hello");
int (*p) (int); //pointer to function x
char * (*q) (char *); //pointer to function y
p = &x; //holds the address of function x
q = &y; //holds the address of function y
cout << p << endl;
cout << q;
return 0;
}
int x(int a) {
return (a * a);
}
char * y(char *b) {
return (b);
}
那么有没有一种方法可以强制 cpu 使用函数地址在另一个函数之前执行特定函数?
编译后,程序将两个地址都打印为1。我期待像数据项那样的十六进制值。即使我打印取消引用的值,我仍然得到1,这是怎么回事?
另外,如果两个函数地址都是1,cpu怎么知道先执行哪个函数呢?
编辑:
我的一个问题没有得到解答,我认为这非常重要!即使有些是重复的,也不会完全重复。
【问题讨论】:
-
operator<<可能对流和函数指针做了一些奇怪的事情。例如。endl是一个函数指针,cout << endl只是做endl(cout)。 -
好吧,如果你走“老路”并使用 printf 你会得到正确的地址: printf("%p %p\n", p, q); //打印两个十六进制值
标签: c++ function-pointers