我正在尝试创建一个数组,在每个索引处我都有一个位字段 我试过这段代码:
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'处转到数组并更改位值(不使用掩码)。编译器错误(虽然我不认为它是相关的)是:
错误:预期的标识符或'('''''之前的标记
答案 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