【发布时间】:2013-04-30 09:06:07
【问题描述】:
我有一个无符号整数数组,需要存储指向数据和函数的指针以及一些数据。在我正在使用的设备中,sizeof 指针与 sizeof unsigned int 相同。如何将指向函数的指针转换为 unsigned int?我知道这使代码不可移植,但它是特定于微控制器的。我试过这个:
stackPtr[4] = reinterpret_cast<unsigned int>(task_ptr);
但它给了我一个错误“无效的类型转换”
将其转换为 void 指针,然后转换为 int 很麻烦。
stackPtr[4] = reinterpret_cast<unsigned int>(static_cast<void *> (task_ptr));
有干净的方法吗?
编辑 - task_ptr 是函数指针void task_ptr(void)
Love Barmar 的回答消除了我的便携性缺点。 void 指针数组实际上比无符号整数更有意义。谢谢 Barmar 和 isaach1000。
编辑 2:知道了,我的编译器正在考虑大内存模型,所以它使用的是 32 位指针,而不是我期望的 16 位指针(总内存为 17K 的小型微控制器)。
【问题讨论】:
-
你不能让数组成为一个空指针数组吗?
-
如何使用函数指针和数据指针的联合?
-
一个简单的
reinterpret_cast应该可以工作,只要 (a) 整数类型足够大并且 (b) 它是一个指向普通(非成员或静态成员)函数的指针。这里是这样吗?task_ptr到底是什么? -
哇,Barmar,这将使我的代码可移植!这是我的隧道视野的一个主要案例。感谢一百万,您的评论价值 1000+
-
void(void)不是指针类型,而是函数类型。对应的指针类型为void(*)(void)。
标签: c++