【问题标题】:Trying to understand this piece of c code but just cant get it试图理解这段 c 代码,但无法理解
【发布时间】:2017-11-16 11:33:03
【问题描述】:

我已经在谷歌上搜索了几个小时来解释以下代码,但找不到,感谢有人可以帮助我。

我已经定义了内存位置(地址只是示例),

#define address (0x000001)

然后我有一个结构

typedef struct{
int a;
int c;
int f;
} foo;

最后(这部分我不知道)我有类似的定义

#define foo__ ( (foo *) address)

这是否意味着我正在创建宏,从而我可以访问结构 foo 的元素并且 foo 结构从 0x000001 开始?

我知道该代码有效 - 已对其进行了测试,但如果我无法理解它的作用,则没有任何用处。

编辑。抱歉,关于问题的信息不清楚 - 是的,NXP 的 LPC 微控制器用于嵌入式环境 - 首先应该告诉我 - 我的错。

感谢您的回答和赞扬 - 我现在想通了。

【问题讨论】:

  • 这里的“作品”是什么意思?
  • foo * const foo__ = (foo *) address; 会是更好的解决方案。
  • 就像@AnttiHaapala 似乎暗示的那样,这不太可能奏效。如果您尝试 printf("a=%d\n",(foo__)->a); 之类的东西,那么我猜它会由于绝对 0x000001 地址而出现段错误。如果你说,声明 foo thisfoo={1,2,3}; 然后 define foo__ (&thisfoo); 那么我猜它会打印 a=1.
  • 可以工作用于嵌入式系统上的内存映射设备。但肯定不是任何随机地址...
  • edit您的问题并告诉我们您的目标平台。是一些微控制器还是一些嵌入式设备?

标签: c pointers structure memory-address


【解决方案1】:

它创建一个宏,如果您使用foo__,它将假定typedef'd struct 的实例存在于(在本例中)0x000001

因此,如果一个实例确实 存在于那里,并且您可以访问它,那么您将能够相应地访问这些元素。但是,这里没有任何保护措施,您可以自行决定尝试这样做是否明智和安全。

【讨论】:

    猜你喜欢
    • 2012-10-24
    • 2019-08-30
    • 2018-02-21
    • 1970-01-01
    • 2019-02-25
    • 2017-10-04
    • 2012-02-17
    • 1970-01-01
    • 2013-08-08
    相关资源
    最近更新 更多