【发布时间】:2014-01-30 11:35:05
【问题描述】:
我认为这在 C 中是不可能的,但要求验证这一点。是否可以在没有这种类型的实变量的结构成员之间进行算术运算?例如:
typedef struct _s1
{
int a;
int b;
int c;
} T1;
我想查看“c”成员相对于结构开头的偏移量。如果我有变量,这很容易:
T1 str;
int dist = (int)&str.c - (int)&str;
但我的结构太大,它在 RAM 中没有成员(仅在 EEPROM 中)。我想进行一些地址计算但不定义 RAM 成员。我可以使用结构指针而不是结构变量来完成这项工作(它只需要 4 个字节),但这个案例对我来说很有趣。
【问题讨论】:
-
定义假指针看看?
-
这可能已经在这里得到了回答,并在其他地方讨论了无数次。我想答案应该是谷歌搜索。你谷歌了吗?
-
@EliasVanOotegem 考虑到 EEPROM 的提及,它很有可能在嵌入式系统上运行。据我们所知,它可能是 8 位或 16 位系统。
-
旁白:您的示例代码应该是
(char*)&str.c - (char*)&str。我手头没有参考资料,但我认为您实际上并不能保证将指针转换为int然后进行算术运算会给出正确的结果。 (另外,如果你将指针转换为整数,你应该使用intptr_t或uintptr_t) -