【问题标题】:How can one use pointer constants to point to a specific memory address (e.g. an address like 0x0001a00) in ANSI C?如何使用指针常量指向 ANSI C 中的特定内存地址(例如 0x0001a00 之类的地址)?
【发布时间】:2020-02-26 20:05:22
【问题描述】:

我正在为一个项目尝试 C 编程中的指针,并希望获得一些指导,了解是否有其他方法可以将指针常量初始化为内存地址 0x0001a000。

以下是我的方法:

volatile int *firstAddress = (volatile int *)0x0001a000; 
printf("First Memory address is: %p\n", firstAddress);

在 C 编程中是否有更短的方法来初始化上述内容?

【问题讨论】:

  • 如何更好,以何种方式?
  • 更短的初始化方式,为了美观。我只是觉得上面的内容有点太长了。
  • 这样很好(假设您的 C 实现支持访问该硬编码地址)。如果您正在处理需要这种访问权限的项目,您将习惯于指针转换,并且寻求文本更短的方法没有任何价值。

标签: c ansi-c


【解决方案1】:

这正是初始化此类常量的方式,但结果非常特定于实现。

如果给定地址不是一个明确记录为有效的地址,您可能会调用undefined behavior

你也不能让它比这更简洁。整数和指针之间的转换需要强制转换。

【讨论】:

  • 我想知道它是否是严格的UB,即使地址被定义为一些硬件寄存器?我的意思是它不包含从 C 角度来看的有效“对象”。另外,对这样一个指针的指针算术会发生什么?
  • @EugeneSh。实现可能决定定义标准没有定义的某些行为。我的猜测是,有问题的实现对语言采用了更“可移植的汇编器”方法。那会让超级猫高兴。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 2011-04-25
  • 1970-01-01
相关资源
最近更新 更多