#include<stdio.h>
typedef struct
{
int *u;
struct node next;
} *node;
int main()
{
return 0;
}
ここはどういう意味*node
ですか?理解できません。ここにノードがあるはずですが、とにかくコンパイル中です。
#include<stdio.h>
typedef struct
{
int *u;
struct node next;
} *node;
int main()
{
return 0;
}
ここはどういう意味*node
ですか?理解できません。ここにノードがあるはずですが、とにかくコンパイル中です。
ここでは、構造体へのポインタであるtypedef
新しいタイプ、を定義します。node
struct node
問題のコードは、どこにも定義されていないように見えても、構造内で使用されているため、コンパイルされない可能性があります。
これを比較してください:
typedef int * pointer_to_int;
ここで、アスタリスクは、新しい名前が付けられたタイプの一部です。つまりpointer_to_int
、タイプのエイリアスですint *
。
あなたの例では、それはまったく同じです!アスタリスクは型の一部であるnode
ため、型のエイリアスになりpointer to struct node { int *u; struct node *next; }
ます。
typedef
また、コードにアスタリスクを含めるとコードの使用が非常に難しくなるため、アスタリスクを含めることはしばしば悪い考えであることに注意してください。Cでは、変数がポインターであるかどうかを知ることはしばしば非常に興味深いので、その事実を隠すことはあまり役に立ちません。
正しい定義は次のとおりです。
typedef struct Node {
int *u;
struct Node *next;
} *node;
コードでは、構造体宣言に問題があります。構文は次のとおりです。
struct identifier/tag {struct declaration list}
構造体宣言リストは、構造体のメンバーの一連の宣言です。
typedef宣言は、型の同義語であるエイリアスを作成する方法を提供します。構文は次のとおりです。
typedef type alias
エラーはどこにありますか?
typedef struct {
この場合、エイリアスはありません!
個人的に、私はこの種の宣言を見たことがありません。これは、次のように使用されます。
typedef struct {
int *u;
struct node *next;
} node;
そして、それは簡単です。整数へのポインターと同じ構造の別の要素へのポインターを使用して構造を定義しています。
ここでの問題:
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;