我對結構對齊有問題。 看來不管我做什麼,編譯器都會在結構的兩個字段之間插入一個字節。這是輸出通過指向32位的結構對齊和訪問兩個16位字段
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結構的再和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);
}
'H'不是結構體。 – unwind 2013-03-27 10:43:15