【发布时间】: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