この構造体の定義で次の構造体へのポインターを取得するにはどうすればよいですか。
typedef struct A {
int a;
int b;
A* next;
} A;
これは私が最初に書いた方法ですが、機能しません。
typedefを定義し、最初に1つのステートメントで構造体を前方宣言し、次に後続の定義で構造体を定義できます。
typedef struct A A;
struct A
{
int a;
int b;
A* next;
};
編集:他の人が述べたように、前方宣言がなくても、構造体名は構造体定義内で有効です(つまり、使用できますstruct A
)が、typedef定義が完了するまで、typedefは使用できません(したがって、使用A
は有効ではありません) )。これは、1つのポインター・メンバーだけではそれほど重要ではないかもしれませんが、多くの自己型ポインターを持つ複雑なデータ構造を持っている場合は、あまり使い勝手が悪いかもしれません。
最初の答えに加えて、typedefと前方宣言がなければ、これも問題ないはずです。
struct A
{
int a;
int b;
struct A *next;
};
あなたはstruct
前に行方不明ですA*
typedef struct A {
int a;
int b;
struct A* next;
} A;
前方宣言なしで進むことができます:
struct A {
int a;
int b;
struct A *next;
};
お願いします、あなたは C++ ではなく C を使用しています。
本当に構造体を型定義する必要がある場合 (そして、私が一緒に仕事をしているほとんどのプログラマーはそうしません¹)、次のようにします。
typedef struct _A {
int a;
int b;
struct _A *next;
} A;
_A
(struct
名前空間内) と(型名前空間内)を明確に区別するためA
。
¹typedef
は、それが指す型のサイズとストレージを隠します - C のような低レベル言語では、何かを隠そうとすることは有害で非生産的であるという議論 (そして私も同意します) です。struct A
いつでも入力することに慣れてくださいstruct A
。