2014-01-24 3 views
0

Я думал, что общее правило состоит в том, что для доступа к элементам указателей на структуру использовался оператор -> и. оператор был использован для доступа к членам фактической структуры. В моем коде я думал, что создал указатель структуры, но мне все равно пришлось использовать. оператор. Может кто-нибудь объяснить, почему?Почему я не могу использовать оператор -> для указателя struct в main?

typedef struct Robot 
{ 
    char **brain; 
    int size; 
} Robot; 

int main(void) 
{ 
    char buffer[100]; 
    Robot *dalek = malloc(sizeof(Robot)*2); 

    for(i = 0; i < 2; i++) 
     dalek[i].brain = malloc(sizeof(char*) * 3); 

    for(i = 0; i < 3; i++) 
    { 
     scanf("%s", buffer); 
     dalek[0].brain[i] = malloc(sizeof(char) * strlen(buffer)); 
     strcpy(dalek[0].brain[i], buffer); 
    } 
} 

ответ

2

dalek является указателем, а dalek[i] эквивалентно *(dalek + i), то есть он разыменовывает. Если вы хотите использовать стрелку, скажите (dalek + i)->brain и т. Д.

+0

Ohhhhh! Спасибо! – user1695758

0

dalek[i] определяется как *(dalek+i). Итак, когда вы делаете dalek[i]->brain, вы действительно делаете *(*(dalek+i)).brain, разыменовывая один указатель дважды. Если вы действительно хотите использовать оператора ->, вы можете использовать (dalek+i)->brain.

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

  • Нет связанных вопросов^_^