C指针问题

标签 c pointers embedded

在我的嵌入式 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/

相关文章:

c - 8051系列的最佳C编译器是什么?

embedded - 入门级嵌入式系统项目?

c - 在调用 connect() 之前,我能知道我将使用哪个端口号吗?

c - 如何清除 C 中的结构数组,然后释放该内存?

c++ - 为什么在指向对象的指针上调用方法与在对象本身上调用方法具有不同的行为?

C - 字符串递归

C - 传递 json_t (jansson lib) 作为参数(指针)

c - 在 ubuntu 中为 procmon 制作时出错

c - 使用 realloc 减少的问题

embedded - 在 MQTT session 中始终使用 QoS 0 有什么问题?