0
大学のクラスでは、連鎖リストを作成したい場合は、ストラクチャを作成し、リストのすべての部分をポインタとして扱うことを教えてくれました。このような 何か:なぜ、構造体へのポインタをチェーンリストの正規のstruct-type変数よりも使用するのですか?
typedef struct node_elem {
int key;
int value;
struct node_elem* next;
} node;
typedef node* node_ptr;
int main() {
node_ptr b;
b = (node_ptr) malloc(sizeof(node));
b->key = 2; b->value=20;
は、私はそれが構造体にデータを書き込むための唯一の信頼できる方法だと思ったんだけど、次のことを試してみました、それは同様に働いた:
node a, c; // this instead of pointer, direct declaration
node_ptr b;
b = (node_ptr) malloc(sizeof(node));
a.key = 1; a.value = 10;
a.next = b;
b->key = 2; b->value = 20;
b->next = &c;
c.key = 3; c.value = 30;
んが、私の質問はありません:なぜポインタバリアントを使用することもできますか?私は別にメモリを割り当てる必要がないので、他の方法は簡単だと思われる。いずれにせよ、私はリストを反復することができます。
"ポインタバージョン"とは、ローカル変数(つまり 'a'または' c'変数)を作成するのではなく、 'malloc'(つまり' b'変数)でメモリを割り当てることですか? – Cornstalks
1000個のノードを持つリストを作成してみてください。あなたは1000個の変数宣言を書き留めますか? –
@Cornstalksはい – phip1611