0

我认为一般的经验法则是 -> 运算符用于访问结构指针的成员,而 . 运算符用于访问实际结构的成员。在我的代码中,我以为我创建了一个结构指针,但最终我仍然不得不使用 . 操作员。有人可以解释为什么吗?

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);
    }
}
4

2 回答 2

2

dalek是一个指针,并且dalek[i]等价于*(dalek + i),即它取消引用。如果你想使用箭头,说(dalek + i)->brain等。

于 2014-01-24T23:54:55.070 回答
0

dalek[i]定义为*(dalek+i)。所以当你这样做时,dalek[i]->brain你真的在​​做*(*(dalek+i)).brain,两次取消引用单个指针。如果你真的想使用->运算符,你可以使用(dalek+i)->brain.

于 2014-01-24T23:57:20.743 回答