我在结构对齐方面有问题。似乎无论我做什么,编译器都会在结构的两个字段之间插入一个字节。这是输出的示例
4 +j 4 +++ 40004 ......... 4
5 +j 5 +++ 50005 ......... 5
6 +j 6 +++ 60006 ......... 6
7 +j 7 +++ 70007 ......... 7
8 +j 8 +++ 80008 ......... 8
9 +j 9 +++ 90009 ......... 9
字节 00 插入到 H 结构的 re 和 im 字段之间。如何阻止编译器对 H 执行此操作,以便指针 pW 可以通过指针 pW 将两个字段读取为 32 位?
也许我需要更改 3d 数组的大小。如果有一种不改变数组大小的方法会很棒。
#include <stdio.h>
#include <stdlib.h>
#define NA 4
#define NS 3
#define NF 5
typedef struct {
short re;
short im;
} cint16 ;
typedef struct
{
cint16 H[NRx][NSTS][NFFT];
} AAA;
AAA H;
AAA * pH = &H;
int main(void)
{
int i, j, k, n, m;
cint16 * pC;
int * pW;
n = 0;
for(i=0; i<NA; i++)
{
for(j=0; j<NS; j++)
{
for(k=0; k<NF; k++)
{
H.H[i][j][k].re = n ;
H.H[i][j][k].im = n;
n++;
}
}
}
pC = &H.H[0][0][0];
m = 0;
for(k=0; k<NA; k++)
{
for(i=0; i<NS; i++)
{
for(n=0; n<NF; n++)
{
printf("%02d ", pC[m].re );
printf("+j%02d,", pC[m].im );
printf(" ");
m++;
}
printf("\n");
}
}
printf("\n\n");
pW = (int *)&H.H[0][0][0];
pC = &H.H[0][0][0];
m = 0;
for(k=0; k<NA*NS*NF; k++)
{
printf("%2X ", pC[m].re );
printf("+j%2X", pC[m].im );
printf(" +++ ");
printf("%X ", pW[m] );
printf(" ......... %d \n", m);
m++;
}
exit (0);
}