为什么从指针得到的地址总是一样的?
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 的函数指针。
我现在有点迷茫。所以,如果我写下面的代码:
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 的函数指针。