2012-10-19 51 views
-2
#include<stdio.h> 

    typedef struct 
    { 
     int *u; 
     struct node next; 
    } *node; 

    int main() 
    { 
     return 0; 
    } 

什么意思是*node在这里?我不明白。我认为这里应该有一个节点,但无论如何它正在编译。结构基础知识(结构为指针)

+2

“家庭作业”标记已弃用。不要使用它。 –

+0

你的目标是什么? – adripanico

+0

@AlexeyFrunze - 从什么时候开始? –

回答

2

这里typedef定义了一个新类型,node,它是一个指向结构的指针。

问题中的代码可能无法编译,因为struct node似乎没有在任何地方定义,但它在结构中使用。

0

比较:

typedef int * pointer_to_int; 

在此,星号是被赋予新名称的类型的部分,即pointer_to_int是该类型int *的别名。

用你的例子,它是完全一样的!星号是该类型的一部分,因此node将成为pointer to struct node { int *u; struct node *next; }类型的别名。

另外,请注意,在typedef中包含星号通常是一个坏主意,因为它会使代码更难使用。在C中,知道变量是否是指针通常非常有趣,因此隐藏这个事实并不是很有帮助。

0

正确的定义是:

typedef struct Node { 
    int *u; 
    struct Node *next; 
} *node; 

在你的代码中有一个struct声明中的问题;语法是:

struct identifier/tag {struct declaration list} 

结构声明列表是结构成员的一系列声明;

typedef声明提供了一种方法来创建别名,该类型的同义词;语法是:

typedef type alias 

错误在哪里?

typedef struct { 

在这种情况下,没有别名!

+1

关于你所做的事情和原因的详细说明? –

+0

@Surai Menon也许你有兴趣进入一个:http://stackoverflow.com/questions/4481603/creating-typedef-pointers-to-typedef-structs-in-c – b3h3m0th

+0

我不是要求自己解释它。这仅仅是OP,你的答案可能不是很有帮助。 –

0

问题在这里:

typedef struct 
    { 
     int *u; 
     struct node next; //struct node is NOT defined. 
    } *node; 

这是错误的:

它应该是:

typedef struct node{ 
    int *u; 
    struct node *next; 
}*nodeptr; 

该代码表示​​ “NODEPTR” 是指向struct node;

0

个人,我从来没有见过这种声明。这就要用到是这样的:

typedef struct { 
    int *u; 
    struct node *next; 
} node; 

这很简单:要定义一个指针到一个整数和一个指针相同结构的另一个元素的结构。

+1

在你的代码中,'struct'是匿名的。因此field'next'不是指向类似'struct'的指针,而是指向未定义的'struct node'。 'typedef'与'struct'本身的名字无关('typedef struct {...} name'或多或少等同于'struct __anonymous__ {...}; typedef struct __anonymous__ name') – Virgile

+0

谢谢澄清 – adripanico