为什么指向函数的指针的值是1
Why is the value of a pointer to a function 1
我理解像数据项这样的函数有地址,函数的地址是存储该函数的机器语言代码开始的内存地址。我有这个代码;
#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;
&
运算符返回块内存的地址,其中&设置操作符。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 为什么++(*p)更改指针值
- C++取消引用指针.为什么会发生变化
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 为什么指针不写入类的地址?
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 为什么要增加导致崩溃的指针
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 共享指针:为什么没有双免费
- 指向2D数组的指针(为什么起作用)
- 函数指针 - 为什么,什么时候我可以没有
- C++ 函数指针 -- 为什么会这样
- 不支持在c或c++中添加两个指针.为什么?
- 无效的指针-为什么
- 模板基类可以存储指向派生但不能存储对象的指针 - 为什么
- 在信号代码中将整数转换为函数指针-为什么这样做?
- 指向结构体作为函数参数的指针-为什么不更新其值