前提・実現したいこと
線形リストの昇順にソートされる挿入関数を以下の図のように作成する上で、関数insert2はリストの先頭に挿入する場合分けをなくすためにダブルポインタを用いて作成するのですが、以下の空欄のお〜きに入る式がわかりません。
該当のソースコード
C
1typedef struct list { 2 int data; 3 struct list *next; 4} list 5 6list * list_alloc(int data) { 7 list *p = malloc(sizeof(list)); 8 p->data = data; 9 p->next = NULL; 10 return p; 11} 12 13void insert2(list ** head_p, int data) { 14 list * new = list_alloc(data); 15 list **p = head_p; 16 while( お && か ) { 17 p = き; //次のnextメンバーを指す 18 } 19 new->next = *p; 20 *p = new; 21} 22int main() { 23 list *head = NULL; 24 insert2(&head,100); 25 insert2(&head,50); 26 insert2(&head,20); 27}
試したこと
![]
間接メンバー"->"は選択演算*、アドレス演算&より優先順位が高いことを考慮して,
"お"、"か"はそれぞれ
**while(p != NULL && data < (p)->data)
で、"き"は
*p = &(p)->next;
であると思うのですが、これは
**p = p
p = * *p
と表記することも等しいと思うのですかどうなんでしょうか。
追記: int a = 0; int *p = &a; の場合
回答3件
あなたの回答
tips
プレビュー