我理解数据项之类的函数具有地址,函数的地址是函数的存储机器语言代码开始的内存地址。我有这个代码;
#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如何知道首先执行哪个函数?
编辑:
我的一个问题没有答案,我觉得非常重要!即使有些人也不会完全复制。
答案 0 :(得分:1)
std::cout
会将函数指针转换为bool,并且由于函数指针不为零,因此会显示值1.
要显示为十六进制值,请将函数指针强制转换为void *
,例如:
cout << (void*)p << endl;
答案 1 :(得分:-1)
您可以通过输入以下内容来检索这些函数地址:
cout<< &p << endl << &q << endl;
&
运算符会返回块存储器的地址,其中变量位于&amp;运算符已设置。