将子例程的地址转换为void指针

亚瑟·穆罕默德(Yasser Mohamed)

尽管函数指针的大小并不总是与不透明指针的大小相同,但可以使用void指针强制转换函数位置吗?

我已经搜索过不透明指针和强制转换函数指针。我发现函数指针和普通指针在某些系统上并不相同。

 void (*fptr)(void) = (void *) 0x00000009; // is that legal???

我觉得我应该这样做

 void (*fptr)(void)= void(*)(void) 0x00000009;

它确实工作正常,尽管我期望一些错误或至少警告我正在使用keil arm编译器

伦丁

不,问题在于您不能在void*函数指针和函数指针之间进行切换,因为它们不是兼容类型。void*对象指针的通用指针类型

在第二种情况下,您会遇到轻微的语法错误,应为(void(*)(void))解决这个问题,我们有:

void (*fptr)(void) = (void *) 0x00000009;         // NOT OK
void (*fptr)(void) = (void(*)(void)) 0x00000009;  // PERHAPS OK (but likely not on ARM)

关于前者,它根本不是有效的C(但可能会作为非标准的编译器扩展支持)。具体而言,它违反了简单分配规则C17 6.5.16.1。的两个操作数都=必须是兼容的指针类型。

关于后者,相关部分是C17 6.3.2.3/5

整数可以转换为任何指针类型。除非先前指定,否则结果是实现定义的,可能未正确对齐,可能未指向引用类型的实体,并且可能是陷阱表示。

空指针存在一些特殊情况,但不适用于您的情况。

所以,你可以大概投了价值9函数指针-你必须检查有关实现定义Keil编译器手册。从那时起,结果函数指针将具有什么有意义的目的,我不知道。

因为该地址9在ARM上肯定不是对齐的地址。相反,它比我期望找到不可屏蔽中断ISR或类似地址的地址晚了1个字节。那么,您实际上打算在这里做什么?从向量表中获取ISR的地址?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将指针转换为void

来自分类Dev

双指针的地址强制转换为void **

来自分类Dev

将false转换为指针类型void *?

来自分类Dev

将 void 指针转换为动态类型

来自分类Dev

C-将指针转换为指向void的指针

来自分类Dev

您可以将“函数指针指向指针”转换为void *

来自分类Dev

如何将void指针强制转换为函数指针

来自分类Dev

如何将类型为void(*)()的指针转换为void *

来自分类Dev

将 void 双指针类型转换为 void,为什么?

来自分类Dev

将子例程转换为可以在公式中使用的函数

来自分类Dev

为什么将指向int的指针转换为void *但将指向函数的指针转换为bool?

来自分类Dev

将指针传递给对象时类型转换为(void *)

来自分类Dev

如何两次将指针转换为“ void *”无效?

来自分类Dev

如何将整数转换为常量void指针?

来自分类Dev

是否可以将Swift类转换为C void *指针?

来自分类Dev

函数指针将参数强制转换为 void

来自分类Dev

将包含void *指针的结构转换为其等效的Ctype

来自分类Dev

C++:将void指针转换为shared_ptr

来自分类Dev

将函数转换为通用 void 指针作为函数参数

来自分类Dev

为什么在将值打印到地址位于指针中的内存中之前,必须将void指针强制转换为int或其他内容?

来自分类Dev

如何将void指针转换为int指针,然后将int指针存储在其中?

来自分类Dev

将*指针转换为***指针

来自分类Dev

将int转换为指针-为什么先转换为long?(如p =(void *)42;)

来自分类Dev

在将指针转换为uintptr_t之前需要转换为void *吗?反之亦然?

来自分类Dev

将指针转换为指针...指向指针?

来自分类Dev

在C语言中,将指针强制转换为struct ao void *的指针有什么用?

来自分类Dev

在 Julia 中将变量转换为 void 指针

来自分类Dev

将C代码移植到C ++,将void *从malloc转换为所需指针的问题

来自分类Dev

为什么在将 void 指针转换为指向 char 指针的指针后取消引用会产生问题?

Related 相关文章

  1. 1

    将指针转换为void

  2. 2

    双指针的地址强制转换为void **

  3. 3

    将false转换为指针类型void *?

  4. 4

    将 void 指针转换为动态类型

  5. 5

    C-将指针转换为指向void的指针

  6. 6

    您可以将“函数指针指向指针”转换为void *

  7. 7

    如何将void指针强制转换为函数指针

  8. 8

    如何将类型为void(*)()的指针转换为void *

  9. 9

    将 void 双指针类型转换为 void,为什么?

  10. 10

    将子例程转换为可以在公式中使用的函数

  11. 11

    为什么将指向int的指针转换为void *但将指向函数的指针转换为bool?

  12. 12

    将指针传递给对象时类型转换为(void *)

  13. 13

    如何两次将指针转换为“ void *”无效?

  14. 14

    如何将整数转换为常量void指针?

  15. 15

    是否可以将Swift类转换为C void *指针?

  16. 16

    函数指针将参数强制转换为 void

  17. 17

    将包含void *指针的结构转换为其等效的Ctype

  18. 18

    C++:将void指针转换为shared_ptr

  19. 19

    将函数转换为通用 void 指针作为函数参数

  20. 20

    为什么在将值打印到地址位于指针中的内存中之前,必须将void指针强制转换为int或其他内容?

  21. 21

    如何将void指针转换为int指针,然后将int指针存储在其中?

  22. 22

    将*指针转换为***指针

  23. 23

    将int转换为指针-为什么先转换为long?(如p =(void *)42;)

  24. 24

    在将指针转换为uintptr_t之前需要转换为void *吗?反之亦然?

  25. 25

    将指针转换为指针...指向指针?

  26. 26

    在C语言中,将指针强制转换为struct ao void *的指针有什么用?

  27. 27

    在 Julia 中将变量转换为 void 指针

  28. 28

    将C代码移植到C ++,将void *从malloc转换为所需指针的问题

  29. 29

    为什么在将 void 指针转换为指向 char 指针的指针后取消引用会产生问题?

热门标签

归档