私はこのコードを持っており、これは(うまくいけば)単一リンクリストの実装になります。
#include <stdio.h>
#include <stdlib.h>
struct NODE{
int d;
struct NODE *next;
};
int addNode(int n, struct NODE **root);
int main(){
struct NODE *root = NULL;
addNode(3, &root);
printf("%i\n", root->d);
getch();
return 0;
}
int addNode(int n, struct NODE **root){
if(*root == NULL){
*root = malloc(sizeof(struct NODE));
*root->d = n;
*root->next = NULL;
return 0;
}
}
これを実行すると、addNode関数内に「構造体または共用体ではないもののメンバー'd'の要求」が表示されます。'次の'部分と同じです。代わりに、関数を次のように変更した場合:
int addNode(int n, struct NODE **root){
struct NODE *temp;
if(*root == NULL){
*root = malloc(sizeof(struct NODE));
temp = *root;
temp->d = n;
temp->next = NULL;
return 0;
}
}
それはうまく機能します。私の質問は; なぜ一時を作成する必要があるのですか?私が理解しているように、コードの最初のバージョンでは、ルートへのポインターを渡しているので、「参照渡し」の問題は発生せず、実行に問題はありません...間違いは何ですか?