gpt4 book ai didi

c - 解构结构体

转载 作者:行者123 更新时间:2023-11-30 15:46:31 24 4
gpt4 key购买 nike

在我的程序中,我使用的结构如下:

typedef struct R{
float s1;
float s2;
float s3;
}Rtype;

然后:

typedef struct Z{
Rtype rval[8][8];
}Ztype;

接下来我要做的是恢复 3 个二维浮点表并分别使用它们。为此,我使用:

Ztype* b;
float f[8][8];
for(int i = 0; i < 8; i++)
for(int j = 0; j < 8; j++)
if(mask == 0)
f[i][j] = b->rval[i][j].s1;
else if(mask ==1)
f[i][j] = b->rval[i][j].s2;
else
f[i][j] = b->rval[i][j].s3;

但我认为应该有办法做得更好。所以我的问题是:我怎样才能做到这一点?

最佳答案

有多种方法,以下是我想到的第一种:

  1. 检查mask 一次,然后选择一个只做正确事情的不同循环,假设 mask在循环中永远不会改变。
  2. 检查mask一次并计算距每个 rval 基数的指针偏移量,并用它来复制 float 。该作业将变成类似 f[i][j] = *(float *) ((char *) b.rval[i][j] + offset);这看起来很可怕,但应该编译成像样的东西。
  3. 使用 unions1 覆盖数组, s2s3字段,所以你可以做 f[i][j] = b.rval[i][j].u.array[mask];或类似的东西。
  4. 检查mask一次并将函数指针设置为正确的赋值函数。不过,如果函数调用很昂贵,这可能会很昂贵。

我可能会选择第一个或第二个。

关于c - 解构结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18317303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com