使用*代替 - > c中的运算符

时间:2016-06-04 08:19:42

标签: c pointers linked-list syntax-error

我在C中创建了一个非常简单的链接列表程序。

#include<stdio.h>
#include<stdlib.h>

int main(){
    struct Int{
        int num;
        struct Int *ptr;
    };
    typedef struct Int NODE;
    NODE *start;
    start = (NODE *) malloc(sizeof(NODE));
    (*start).num = 100;
    (*start).ptr = (NODE *) malloc(sizeof(NODE));

    (*start).(*ptr).num = 123;
    (*start).(*ptr).ptr = NULL;

}

当我将最后两行替换为: -

start -> ptr -> num = 123;
start -> ptr -> ptr = NULL;

错误已解决。

问题是为什么我无法使用(* start).代替start ->。根据此答案 What does this mean "->"? 两者都是一样的。

3 个答案:

答案 0 :(得分:11)

你应该把最后两行写成:

(*(*start).ptr).num = 123;
(*(*start).ptr).ptr = NULL;

因为(*ptr)不是(*start)的成员,您应该访问ptr,然后取消引用整个表达式。

答案 1 :(得分:4)

*ptr不是struct Int - ptr的成员,因此您无法跟*ptr运营商.

如果您必须使用*并取消引用指针,则需要将整个(*strart).ptr表达式视为指针:

(*(*start).ptr).num = 123;
(*(*start).ptr).ptr = NULL;

答案 2 :(得分:1)

N3337 5.2.5 / 1,2

  

post fi x表达式后跟一个点。或箭头 - &gt;,可选地后跟关键字模板(14.2),   然后是 id-expression ,是一个post fi x表达式。[...]

     

无论哪种情况,   id-expression应该命名或其基类之一。[...]

所以 dot 必须跟着类成员的名字。你甚至不能写:

A a;
a.(some_member);//note the parentheses