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

Why is the value of a pointer to a function 1

本文关键字:指针 为什么 函数      更新时间:2023-10-16

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

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

编辑:

我的一个问题没有得到回答,我觉得这很重要!不完全使它成为一个副本,尽管有些是。

std::cout将函数指针转换为bool类型,由于函数指针不为零,因此显示值为1。

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

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

您可以通过输入以下命令来检索这些函数地址:cout<< &p << endl << &q << endl;&运算符返回块内存的地址,其中&设置操作符。