为什么从指针得到的地址总是一样的?

Why address gotten from the pointer is always the same?

我现在有点迷茫。所以,如果我写下面的代码:

int x = 5;
cout << &x << endl;

编译它并 运行,我会得到类似 0x920FC7D 的东西,这是内存位置的正常十六进制值。但是当我编译并 运行 以下代码时:

#include <iostream>
using namespace std;

void add(int a, int b){
    cout << a + b << endl;
}

void subtract(int a, int b){
    cout << a - b << endl;
}

void multiply(int a, int b){
    cout << a * b << endl;
}

int main(){

    void ( *operations[3] ) (int, int) = {add, subtract, multiply};

    int length = sizeof(operations)/sizeof(operations[0]);

    for(int i=0; i < length; ++i){
        cout << operations[i] << endl;
    }

    return 1;
}

我总是得到:

1
1
1

指针的地址好像也应该是十六进制的值,但即使是二进制或者十进制,为什么总是一样?

如果您查看运算符 << 的重载,将 std::ostream& 作为左侧操作数,您会发现没有重载指向函数的指针作为右侧操作数操作数.

但是你插入的是函数指针。那么,插入的是什么?好吧,函数指针可以隐式转换为 bool,并且 bool 有一个重载。全部为 1,因为所有转换后的值都为真。这是因为 none 个函数指针为 null,这是唯一转换为 false 的函数指针。