回答編集履歴

1

編集後のコードについて

2016/04/01 10:15

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -1 +1,49 @@
1
1
  gcc 5.3.0で試して見ましたが、`hogehoge`でも`hogegege`でも両方とも1になりますけど、どう変わるのでしょうか?コンパイラやそのときのオプションを合わせて教えていただければと思います。
2
+
3
+
4
+
5
+ ---
6
+
7
+
8
+
9
+ 編集後のコードでやりたいことがなんとなくわかりました。`hoge`に入っているポインタを最後の所に移したいと言うことですね。それであれば、次のように書くべきでしょう。
10
+
11
+ ```
12
+
13
+ ABC *hogehoge(ABC **head)
14
+
15
+ {
16
+
17
+ while ((*head)->NEXT != NULL) {
18
+
19
+ *head = (*head)->NEXT;
20
+
21
+ }
22
+
23
+
24
+
25
+ return *head;
26
+
27
+ }
28
+
29
+ void hogegege(ABC **head)
30
+
31
+ {
32
+
33
+ while ((*head)->NEXT != NULL) {
34
+
35
+ *head = (*head)->NEXT;
36
+
37
+ }
38
+
39
+
40
+
41
+ return;
42
+
43
+ }
44
+
45
+ ```
46
+
47
+ 呼び出す時は`hogehoge(&hoge)`のようにします。書き換えたいのは`ABC *`型の`hoge`ですので、書き換えるには`ABC **`型で渡さないと`hoge`の**値**(つまり、ABC型へのポインタという値)は変わりません。なので、`ABC *`型で渡しても、`hoge`自体は何も変わらないのです。上のコードなら、どちらの関数を使っても期待通りに動くと思います。
48
+
49
+