gpt4 book ai didi

c - 在 C 中声明指针

转载 作者:行者123 更新时间:2023-11-30 21:33:06 25 4
gpt4 key购买 nike

在 C 中声明指针时,*(volatile unsigned char *) 是否等同于仅使用 volatile unsigned char?例如,会写

#define myMemoryLocation (*(volatile unsigned char *)(12345678))

与使用相同:

#define myMemoryLocation (volatile unsigned char)(12345678)

最佳答案

让我们逐步分析您的第一个表达式

  • 以 int 开头:12345678

  • 强制转换 (unsigned char *)(12345678) 生成一个指针。该指针指向内存地址 12345678。如果您引用这样的指针,您将得到一个无符号字符

  • (volatile unsigned char *)(12345678) 是同一个指针,但您告诉编译器该指针指向的内存位置的值可以“在其拥有”。

  • 然后取消引用该指针,因此 *(volatile unsigned char *)(12345678)) 是内存位置 12345678 的值,解释为 unsigned char。因为它是 volatile 的,所以每次取消引用指针时,编译器都必须发出代码来读取内存位置;例如,它无法将位置缓存在寄存器中。

  • 最后,为该表达式指定一个符号名称#define myMemoryLocation (*(volatile unsigned char *)(12345678))

因此,每次您在程序中使用 myMemoryLocation 时,编译器都会发出代码以从内存地址 12345678 读取无符号字符

现在,让我们看看你的第二个表达式。 ( volatile 无符号字符)(12345678))。这只是一个常量表达式。如果系统上的 unsigned char 长度为一字节,则其值始终为 0x4e(或十进制 78)。

显然这两种表达方式非常不同。

关于c - 在 C 中声明指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35072316/

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