現在、ポインタや構造体について学習中ですが、私は練習に取り組んでいます。 私の目標は、基本的に新しいリスト要素を作成し、それを前面に追加する関数head_insertを書くことです。C++でリストを作成する
注:データ型リストは既にC++にありますが、これは動的構造の背後にあるコンセプトをよりよく理解して理解するためのものです。
私のコードは次のようである:
struct list{
int val;
list *next = NULL;
};
typedef list* ptr_list;
ptr_list head_insert(ptr_list head, const int element){
ptr_list tmp_head;
tmp_head = new list;
tmp_head->val = element;
tmp_head->next = head;
return tmp_head;
}
int main(){
ptr_list head = NULL;
head = head_insert(head, 1); // This is the crucial step I think, as head is not initialized yet
head = head_insert(head, 2);
return 0;
}
事は、すなわち私のリストが空である、頭がNULLのとき、私は仕事にも機能head_insertをしたい、です。しかし、自分のコードをデバッグすると、head_insertの各呼び出しがNULLのままであることに気付きましたが、head内の変更(head-> val、head-> next)が行われます。
なぜですか?それはtmp_headの範囲と関係がありますか? 私の意図したとおりに動作するようにコードを修正する方法はありますか?
私が最初にNULLに頭を設定しますが、スペースを割り当て、最初の要素を手動で設定していけない場合は、すべてが完璧に正常に動作します:あなたの時間を
head = new list;
head->val = 1;
感謝をし、助けて! いいえ
問題は表示されません。 '頭部 'が変化しているようだ。http://coliru.stacked-crooked.com/a/baf503d3389a8cac –
コードは正常に見える。たぶんあなたはデバッガにいくつかの問題があります。 – arturx64