前提
c言語で双方向循環リストを実装しながら疑問に感じたことがある。それは
#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct s_stack { int num; struct s_stack *prev; struct s_stack *next; } t_stack; void change_content(t_stack *stack) { t_stack *tmp; tmp = stack; tmp->num = 100; } int main(void) { t_stack *stack; stack = malloc(sizeof(t_stack) * 1); stack->num = 0; stack->prev = NULL; stack->next = NULL; change_content(stack); printf("%d", stack->num); return 0; }
この場合はchange_contentの引数に'stack'と入れることで参照渡しができ、値が変わっておりますが、この双方向循環リストに値を入れていってソートする場合などは'&stack'と引数に渡している人がいます。どちらも値を変えるという点は同じであるのに、使い分けている人がいるのはなぜでしょうか?どういう違いがあるのでしょうか?
void change_content(t_stack **stack); change_content(&stack);
プロトタイプ宣言も**stackとダブルポインタにしています。どういう違いがあるのでしょうか?
つまり 質問は
参照渡しをするとき、&をつける時と、つけない時の違いは何ですか? リストを操作する上での違いはありますか?
* や & に関しては純粋に文法の話なので,まずは復習されるのが早いかと.
「文法面の把握には問題がないが,特定の実装の意味みたいなところの把握等が問題だ」ということであれば
> '&stack'と引数に渡している人がいます
とかじゃなく,実例のコードを具体的に示さないと話ができないのでは.
回答2件