为什么是指向函数1的指针的值

时间:2016-10-25 22:04:10

标签: c++ function-pointers

我理解数据项之类的函数具有地址,函数的地址是函数的存储机器语言代码开始的内存地址。我有这个代码;

#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如何知道首先执行哪个函数?

编辑:

我的一个问题没有答案,我觉得非常重要!即使有些人也不会完全复制。

2 个答案:

答案 0 :(得分:1)

std::cout会将函数指针转换为bool,并且由于函数指针不为零,因此会显示值1.

要显示为十六进制值,请将函数指针强制转换为void *,例如:

cout << (void*)p << endl;

答案 1 :(得分:-1)

您可以通过输入以下内容来检索这些函数地址: cout<< &p << endl << &q << endl; &运算符会返回块存储器的地址,其中变量位于&amp;运算符已设置。