在我的嵌入式 C 程序中,我有一个结构:
struct var{
unsigned long value;
unsigned long length;
+ More
}
这些结构的数组用于保存变量。大多数存储的变量都简单地存储在“值”中,因此长度设置为 1。
但是,其中一些变量是数组,我试图将起始地址存储在“值”中。
unsigned long lookup[10];
variables[x].length = 10;
然后我不太确定如何存储地址...
variables[x].value = lookup;
// lookup is a pointer so I cant put it into value
或
variables[x].value = (unsigned long)lookup;
// value reads back through sprintf+uart as '536874692'
// which couldnt be a valid memory address!
我可能会放弃并在结构中添加一个指针变量
编辑:
我想避免将指针添加到结构中,因为我必须返回并重写闪存读/写函数以保存指针。这些非常复杂,目前可以正常工作,所以我不想碰它们!
最佳答案
更简洁的选择是使用 union。
struct var{
union {
unsigned long numeric;
void *ptr;
} value;
unsigned long length;
+ More
}
您还可以选择性地包括一个类型枚举,就像使用 union 的部分经常做的那样。
关于C指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1200390/