2016-07-08 2 views
-2

Я пытаюсь создать массив, который при каждом индексе я есть битовое поле я попробовал этот код:создать массив междунар который немного поле

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' и изменить значения битов (без использования масок). ошибка компилятора (хотя я не думаю, что это уместно) является:

error: expected identifier or '(' before '[' token

+0

Если вы получили сообщение об ошибке со своего компилятора, вы должны скопировать/вставить эту ошибку в свой вопрос, чтобы другие могли вам помочь. У вас также есть '_' в вашей второй до последней строке, что не является правильным синтаксисом. – nos

+0

Ну, вы код не имеет большого смысла и плохо отформатирован. И bitfield-'struct', конечно, не очень хорошая идея, если вы хотите обращаться к одиночным битам. Как правило, никогда не бросайте, если вы действительно не знаете все его последствия, принимайте их и (самое главное) действительно нужно. Также см. [Ask]. Ошибка компилятора: я бы предположил, что компилятор лучше знает здесь, что актуально, а что нет. Он должен сказать вам кое-что, что компилятор уверен, что ваш код неправильный. – Olaf

+0

* ошибка компилятора (хотя я не думаю, что это релевантно) * Ошибки компилятора ** всегда актуальны. Все они. – dbush

ответ

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 
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 
+0

Как я понимаю, в то время как сумма [x1 +. .. + xn] size (в моем случае [2 + ... + 2]) меньше размера бит одного целого без знака, вы получите только одно целое число, иначе вы получите более одного целого числа и ** p ** является указателем на первое целое число в структуре. –

Смежные вопросы