C++ 从指针到uint32的类型转换

C++ 从指针到uint32的类型转换,c++,pointers,casting,int,linker-scripts,C++,Pointers,Casting,Int,Linker Scripts,我正在浏览一个链接器描述符文件,发现下面几行代码,我无法理解这里使用的类型转换概念 extern std::uintptr_t __sROData_LMA[]; /* start of LOAD region for DATA */ uint32_t * p_src, * p_dest; #ifdef XMC_BOOT // Copy the rodata segment initializers from ROM to RAM. // Note that all data

我正在浏览一个链接器描述符文件,发现下面几行代码,我无法理解这里使用的类型转换概念

extern std::uintptr_t   __sROData_LMA[]; /* start of LOAD region for DATA */
uint32_t * p_src, * p_dest;
#ifdef XMC_BOOT
    // Copy the rodata segment initializers from ROM to RAM.
    // Note that all data segments are aligned by 4.
    p_src  = static_cast<uint32_t *>(static_cast<void*>(__sROData_LMA));
    p_dest = static_cast<uint32_t *>(static_cast<void*>(__sROData));
    while (p_dest < static_cast<uint32_t*>(static_cast<void*>(__eROData)))
    {
        *p_dest++ = *p_src++;
    }
#endif
extern std::uintpttr_t_sROData_LMA[];/*数据加载区域的开始*/
uint32_t*p_src,*p_dest;
#ifdef XMC_引导
//将rodata段初始值设定项从ROM复制到RAM。
//请注意,所有数据段都以4对齐。
p_src=静态投射(静态投射(_sROData_LMA));
p_dest=静态施法(静态施法(_sROData));
而(p_dest

p_src=static_cast(static_cast(u sROData_LMA))是什么在程序中是什么意思?这里是如何进行打字的?提前谢谢

问题是,您不能取消对空指针的引用,而是对uint32\t指针的引用。 代码本身用于
将rodata段初始值设定项从ROM复制到RAM。
,这是ELF二进制文件所必需的。
事实上,这是一种错误的语言。这是C++,不是C。对于错误,抱歉,是CPPTEST转换成UntPrTrt为可以用来从ROM复制RAM内容的东西。要了解它为什么首先强制转换为
void*
请尝试删除
静态强制转换
并读取编译器错误。这与使用
重新解释强制转换直接强制转换为
uint32\u t*
有何不同?为什么有必要进行
void*
?在这种情况下,
重新解释强制转换
相当于代码abovce中的两个静态强制转换(IRC,在这种情况下定义为这一点),但使用静态强制转换更难出错,即。如果将来更改某些类型)。而reinterpret_cast会在没有任何警告的情况下将任何内容(几乎)转换为任何内容。只是风格的问题。与其他类型转换相比,我更喜欢
静态类型转换
。@user8540390我可能需要完整的源代码来回答这个问题,例如
\uu sROData
\uu eROData