gpt4 book ai didi

c++ - 是否存在将 long 转换为指针有效的情况

转载 作者:太空狗 更新时间:2023-10-29 19:45:13 24 4
gpt4 key购买 nike

在我的 C++ 学习过程中,我在 x86 中遇到过这样的代码,我不理解:

unsigned long value = 50;
unsigned char* result = (unsigned char*)value;

检查指针会出现内存访问错误(即我不能写 std::cout << *result; )。如果有的话,类型转换线应该是这样的:

unsigned char* result = (unsigned char*)&value;

但事实并非如此。所以我的问题是,在什么情况下(如果有的话)第一个 cast 可用?或者换句话说,是否可以从指针中获取数据?

最佳答案

我目前正在从事一些数字信号处理工作,其中涉及对 Analog Devices DSP 进行编程。这是他们随开发板一起提供的 .h 文件中的一小段:

#define pUART0THR                ((volatile unsigned int *)0x3c00)    /* Transmit Holding Register */
#define pUART0RBR ((volatile unsigned int *)0x3c00) /* Receive Buffer Register */
#define pUART0DLL ((volatile unsigned int *)0x3c00) /* Divisor Latch Low Byte */
#define pUART0IER ((volatile unsigned int *)0x3c01) /* Interrupt Enable Register */

我敢打赌,如果您深入研究任何其他嵌入式系统的 header ,您一定能找到类似的东西。

在这种情况下,0x3c00 是一个内存地址,您可以向其写入一个字节,并让硬件 UART 模块读取它并通过串行端口传输它。 0x3c01 是一个寄存器的地址,如果你设置第二位(位 1),那么当 UART 发送缓冲区(在地址 0x3c00) 为空 = 您放在那里的字节已发送。

但是,为了让您不必记住所有这些地址,并获得一些好听的(或至少更容易记住的)名称来调用它们,它们有一堆像上面那样的定义。

关于c++ - 是否存在将 long 转换为指针有效的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58027984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com