-2
    #include<stdio.h>

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

    int main()
    {
        return 0;
    }

ここはどういう意味*nodeですか?理解できません。ここにノードがあるはずですが、とにかくコンパイル中です。

4

5 に答える 5

2

ここでは、構造体へのポインタであるtypedef新しいタイプ、を定義します。node

struct node問題のコードは、どこにも定義されていないように見えても、構造内で使用されているため、コンパイルされない可能性があります。

于 2012-10-19T11:22:03.013 に答える
0

これを比較してください:

typedef int * pointer_to_int;

ここで、アスタリスクは、新しい名前が付けられたタイプの一部です。つまりpointer_to_int、タイプのエイリアスですint *

あなたの例では、それはまったく同じです!アスタリスクは型の一部であるnodeため、型のエイリアスになりpointer to struct node { int *u; struct node *next; }ます。

typedefまた、コードにアスタリスクを含めるとコードの使用が非常に難しくなるため、アスタリスクを含めることはしばしば悪い考えであることに注意してください。Cでは、変数がポインターであるかどうかを知ることはしばしば非常に興味深いので、その事実を隠すことはあまり役に立ちません。

于 2012-10-19T11:24:16.990 に答える
0

正しい定義は次のとおりです。

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

コードでは、構造体宣言に問題があります。構文は次のとおりです。

struct identifier/tag {struct declaration list}

構造体宣言リストは、構造体のメンバーの一連の宣言です。

typedef宣言は、型の同義語であるエイリアスを作成する方法を提供します。構文は次のとおりです。

typedef type alias

エラーはどこにありますか?

typedef struct { 

この場合、エイリアスはありません!

于 2012-10-19T11:24:34.290 に答える
0

個人的に、私はこの種の宣言を見たことがありません。これは、次のように使用されます。

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

そして、それは簡単です。整数へのポインターと同じ構造の別の要素へのポインターを使用して構造を定義しています。

于 2012-10-19T11:29:18.893 に答える
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;

于 2012-10-19T11:26:06.737 に答える