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