Closed. This question needs to be more focused. It is not currently accepting answers. Learn more
想改进这个问题吗?更新问题,使其只关注一个问题editing this post
四年前关闭。
我有一个嵌入式系统,应该根据它的状态存储不同的结果集。
一种可能的解决方案是使用联合:
typedef struct
{
    union
    {
        struct
        {
            double  Val1;
            double  Val2;
        } State1;

        struct
        {
            double  Val3;
        } State2;
    };
} strBuf;
strBuf Buf;

现在,我可以使用这些函数存储值(我可以通过其函数指针调用这些函数来切换度量类型):
void meas1(strRes* res)
{
    Buf.State1.Val1 = res->v1;
    Buf.State1.Val2 = res->v2;
}

void meas2(strRes* res)
{
    Buf.State2.Val3 = res->v1;
}

其思想是根据度量使用State1或State2。
我认为union结构是一种可靠的方法,因为我在分配内存时不会出错。
缺点是在状态2中不必要地使用内存。
另一个缺点是可能访问错误的变量。
但出于好奇:我怎么用指针来做呢?
你建议的解决方案的利弊是什么?
编辑:
系统每100毫秒生成一个值。这些值在RX210上进行处理。
第一个状态根据两个双倍d1[n],d2[n]及其先前的值d1[n-1],d2[n-1]计算如下:
m=log2(d1[n]/d1[n-1])/log2(d2[n]/d2[n-1])
(我想log2是最快的日志)
第二种状态只计算两个双倍的比率:
p=d1[n]/d2[n]
这意味着我不必存储n-1值。
编辑2:
strRes是指向以前生成的值的指针。有点像
typedef struct
{
    double v1;
    double v2;
} strRes;

最佳答案

您可以使用下面的代码。

typedef struct {
    double *val;
} strBuf;
strBuf Buf;

void meas1(strRes* res)
{
    Buf.val = malloc(2 * sizeof(double));
    Buf.val[0] = res->v1;
    Buf.val[1] = res->v2;
}

void meas2(strRes* res)
{
    Buf.val = malloc(1 * sizeof(double));
    Buf.val[0] = res->v1;
}

优点:根据需要动态分配内存。
没有不必要的内存浪费。
缺点:速度,因为内存是在运行时分配的。

关于c - C指针代替并集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28169522/

10-11 20:38
查看更多