私はしばらくの間 C でリンクされたリストを作成しようとしてきましたが、それもできました。今、私は自分のグローバルポインタ/変数をローカルのものに置き換えようとしているので、関数間で構造体を渡すことができます. 問題は、このテーマについて読めば読むほど、実験すればするほど、頭の中でエラーや爆発が増えることです。
私のコードは少し長い (100 行) ので、それが何をどのように行っているかを説明しようと思います。
私は構造体を発表しました:
struct node {
char Name[21];
struct node *Next;
};
また、関数の前に構造体へのポインターを発表しました。
struct node *global;
*global はグローバル ポインタですね。
これで、リンクされたリストを処理する新しいポインターを内部に持つ 3 つの関数ができました。
void add(void); //add nodes to list with *global, *pointer and *last
struct node *pointer *last;
void print(void); //print node inside the list with *global and *pointer
struct node *pointer;
void quit(void); //free malloc'd list using *global and *pointer
struct node *pointer;
ここで、関数から別の関数に構造を渡していないことは明らかです。関数内のローカル ポインターにグローバル *global を割り当てているだけですが、これは正常に動作しますが、私が学ぼうとしているものではありません。
私は自分の問題に対する答えを探していましたが、どうやらCの基本に大きな何かが欠けているようです.
それで、私はここで何をするべきですか?どうすれば移動できますか
struct node *global;
たとえば、メイン関数内にリンクされたリストを作成し、そこから関数 add、print、quit に渡すことができます。そして、これらの関数からこのリストを返すにはどうすればよいですか?
また、元の構造体はコードの先頭にあるはずですか、それともグローバル ポインター/変数を避けるために各関数内で再度作成する必要がありますか?