質問するログイン新規登録

回答編集履歴

2

追記

2021/11/04 16:30

投稿

int32_t
int32_t

スコア22007

answer CHANGED
@@ -1,5 +1,19 @@
1
1
  「第二の要素」「二次元目の要素」というのが何なのかはっきりしませんが、`p->Link[0から4]` に何か入っているのかという観点では、①も②も、`p`の初期化直後は何も代入していないのでデタラメな値が入っていて使えません。
2
2
 
3
- ②は`p->Link[]`に確保したメモリのポインタを代入しているから`NODE`を指すようになります。①も同じようにポインタを代入すれば同じように動きます。
3
+ ②は`p->Link[]`に確保したメモリのポインタを代入しているから`NODE`を指すようになります。①も同じようにポインタを代入すれば同じように動きます。①と②は最初のmalloc()のパラメータが違うだけで、それ以外の使い方は同じです。
4
4
 
5
- `sizeof` 演算子はコンパイル時に決まる型のサイズを返します。`sizeof`がこの質問に役に立つかどうかは怪しいです。
5
+ `sizeof` 演算子はコンパイル時に決まる型のサイズを返します。`sizeof`がこの質問に役に立つかどうかは怪しいです。
6
+
7
+ ----
8
+
9
+ 質問文へのコメントを読むと、本当に欲しいものは動的に子供ノードの数が変更できるツリーのようです。
10
+
11
+ ```c
12
+ typedef struct node {
13
+ int id;
14
+ size_t children_size;
15
+ struct node* children;
16
+ } NODE;
17
+ ```
18
+
19
+ コンパイル時固定サイズの配列やメモリ確保時にサイズが決まる配列では子供ノードの数の変更ができないので、`malloc()`や`realloc()`で確保した1次元配列へのポインタをメンバに入れるとよいかもしれません。

1

文言

2021/11/04 16:30

投稿

int32_t
int32_t

スコア22007

answer CHANGED
@@ -1,3 +1,5 @@
1
1
  「第二の要素」「二次元目の要素」というのが何なのかはっきりしませんが、`p->Link[0から4]` に何か入っているのかという観点では、①も②も、`p`の初期化直後は何も代入していないのでデタラメな値が入っていて使えません。
2
2
 
3
- ②は`p->Link[]`に確保したメモリのポインタを代入しているから`NODE`を指すようになります。①も同じようにポインタを代入すれば同じように動きます。
3
+ ②は`p->Link[]`に確保したメモリのポインタを代入しているから`NODE`を指すようになります。①も同じようにポインタを代入すれば同じように動きます。
4
+
5
+ `sizeof` 演算子はコンパイル時に決まる型のサイズを返します。`sizeof`がこの質問に役に立つかどうかは怪しいです。