C 破坏结构
在我的程序中,我使用了如下结构:C 破坏结构,c,struct,C,Struct,在我的程序中,我使用了如下结构: 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 &l
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;
Ztype*b;
浮动f[8][8];
对于(int i=0;i<8;i++)
对于(int j=0;j<8;j++)
如果(掩码==0)
f[i][j]=b->rval[i][j].s1;
else if(掩码==1)
f[i][j]=b->rval[i][j].s2;
其他的
f[i][j]=b->rval[i][j].s3;
但我认为应该有办法做得更好。所以我的问题是:我该怎么做呢?有几种方法,以下是我想到的第一种方法:
mask
一次,并选择一个做正确事情的不同循环,假设mask
在循环中从未改变mask
一次,计算每个rval
底部的指针偏移量,并使用该偏移量复制浮点。赋值将类似于f[i][j]=*(float*)((char*)b.rval[i][j]+offset)代码>看起来很吓人,但应该编译成像样的东西
union
用s1
、s2
和s3
字段覆盖数组,这样就可以执行f[i][j]=b.rval[i][j].u.array[mask]代码>或类似的东西
mask
一次,并设置一个指向正确赋值函数的函数指针。但是,如果函数调用很昂贵,这可能会很昂贵我可能会选择第一个或第二个。使用宏替换或指向一维数组的指针,如下所示:
Rtype (* pRval)[8] = b->rval;
// ...
f[i][j] = pRval[i][j].si;
看起来好多了:)。@Kevin:1。我吃了*。2.这只是我正在做的一个例子。我希望在你的实际代码中,
b
被初始化。@Medinoc:当然是;)三个表的尺寸是否相关?这可能会影响您的设计选择…@awashburn:对于所有三张桌子,它始终是8x8。