创建int的数组,这是一个位字段

时间:2016-07-08 11:48:05

标签: c arrays ansi bit-fields

我正在尝试创建一个数组,在每个索引处我都有一个位字段 我试过这段代码:

struct bitF {
    unsigned int x1:1;
           ...
    unsigned int xn:1;
}intBF;
typedef struct intBF *arr[];
int main(){
int i;
unsigned int *arr2[10]
for(i=0;i<sizeof(arr2)/sizeof(unsigned int);i++)
{   arr2[i] = malloc(sizeof(intBF));
    arr2[i] = (unsigned int *)(&intBF);
    arr[i].x5 = 3;}
return 0;}

但是我从编译器得到最后一个代码行的错误。 我希望能够在索引'n'处转到数组并更改位值(不使用掩码)。编译器错误(虽然我不认为它是相关的)是:

  

错误:预期的标识符或'('''''之前的标记

2 个答案:

答案 0 :(得分:1)

更优雅的解决方案:

#define SIZE 5
typedef struct {
    unsigned int x1:2;
       ...
    unsigned int xn:2;
}TYPE;
main()
{
    int i;
    unsigned int *p;
    TYPE *arrType = malloc(sizeof(TYPE)*SIZE);
    arrType[0].x2 = 1;
    arrType[1].x2 = 2;
    arrType[2].x2 = 3;
    for(i=0;i<SIZE;i++)
    {
        p = (unsigned int *)(&arrType[i]);
        printf("%d\n",*p);
    }
    free(arrType);
    return 0;
}

和输出(如预期的那样)是:

4
8
12
0
0

答案 1 :(得分:0)

我通过试验和错误找到了解决方案:))),

#define SIZE 5
struct bitF {
    unsigned int x1:2;
       ...
    unsigned int xn:2;
}intbf[SIZE];
main()
{
    int i;
    unsigned int *p[SIZE];
    for(i=0;i<SIZE;i++) 
    {
        p[i] = malloc(sizeof(intbf[i]));
        p[i] = (unsigned int *)(&intbf[i]); 
    }
    intbf[0].x2 = 3;
    for(i=0;i<SIZE;i++)
        printf("%d\n",*p[i]);
    return 0;
}

我得到了输出:

12
0
0
0
0