Почему я не могу использовать оператор -> для указателя структуры в 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 и т.п.

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

Другие вопросы по тегам