【问题标题】:Why can't I use the -> operator for a struct pointer in main?为什么我不能将 -> 运算符用于 main 中的结构指针?
【发布时间】:2014-02-16 03:36:31
【问题描述】:

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

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

【问题讨论】:

    标签: pointers dot-operator


    【解决方案1】:

    dalek[i] 定义为*(dalek+i)。因此,当您执行 dalek[i]-&gt;brain 时,您实际上是在执行 *(*(dalek+i)).brain,两次取消引用单个指针。如果你真的想使用-&gt; 运算符,你可以使用(dalek+i)-&gt;brain

    【讨论】:

      【解决方案2】:

      dalek 是一个指针,dalek[i] 等价于*(dalek + i),即取消引用。如果您想使用箭头,请说(dalek + i)-&gt;brain 等。

      【讨论】:

        猜你喜欢
        • 2014-05-30
        • 2019-11-08
        • 1970-01-01
        • 2017-02-12
        • 1970-01-01
        • 2021-03-17
        • 1970-01-01
        • 2017-07-18
        相关资源
        最近更新 更多