c++ - 这部分代码是什么意思?

标签 c++ c

有人能说说这段代码是什么意思吗?

void (* const rvt[])(void) = {
  (void (*) (void))((unsigned long)&__STACK_END), // The initial stack pointer
  xkg_som,                                  // The reset handler
  xnt_ISR,                                  // The NMI handler
  FaultISR,                                 // The hard fault handler
  IntDefaultHandler,                        // The MPU fault handler
  bgs_stm,                                  // The bus fault handler
  IntDefaultHandler,                        // The usage fault handler
  0,                                        // Reserved
  0,                                        // Reserved
  IntDefaultHandler,                        // The MPU fault handler
};

其实我没看懂

最佳答案

void (* const rvt[])(void)

手段(由 cdecl.org 提供):

declare rvt as array of const pointer to function (void) returning void


T foo = {
    value1,
    value2,
    value3 // ...
};

这是 aggregate initialization [1] 的数组。此外,这意味着 rvt 的声明是一个定义。


&__STACK_END

addresof 运算符获取变量的内存地址。

(unsigned long)&__STACK_END)

地址被转换为unsigned long类型。

(void (*) (void))((unsigned long)&__STACK_END)

转换后的值再次转换为指向返回 void 的函数 (void) 的指针,这是存储在数组中的函数指针的类型。


数组的其余初始化值可以是函数名、函数指针或可以隐式转换为函数指针的东西,例如 lambda。

关于c++ - 这部分代码是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40607287/

相关文章:

c++ - mariadb make_query 卡在 make_query() 调用中

c - Windows 中文件夹及其子文件夹中所有文件的列表

c - 列表未正确使用正则表达式管理的字符串

c++ - 指针间接问题

c++ - #defines 调用方法的内部工作

c++ - 只有 0 和 4 作为数字的最小倍数

c++ - 您可以使用自定义比较器将 std::map 转换为无序映射吗?

c++ - 已分配但未初始化

C编程: Counting word length occurences in a string

c - C : authentication gets 530 "Please login with user and pass" with anonymous 中的套接字 FTP