回答編集履歴
1
補足説明追加
test
CHANGED
@@ -21,3 +21,43 @@
|
|
21
21
|
通常関数に渡すのは「値」なので呼びだされた側で受け取った引数を変更しても呼び出し側には何の影響もないため値が格納されているアドレスを渡す事で、そのアドレスの中身を書き換えたら呼び出し元でもその影響(結果)を受け取れるという事ができます
|
22
22
|
|
23
23
|
つまり num_of_references のアドレス `&num_of_references` を渡す事で相手先ではそのアドレスの中に値を入れる事ができ戻ってきた後に呼び出し元で num_of_reference を参照すると相手先で格納してくれた値が受け取れる(参照できる)という理屈です
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
(ついでの補足)
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
```c
|
34
|
+
|
35
|
+
void test1(int a) {// 引数でaの値を受け取る
|
36
|
+
|
37
|
+
a = 100;// a の値を100に変更するけどその結果は呼び出し元には影響しない
|
38
|
+
|
39
|
+
}
|
40
|
+
|
41
|
+
void test2(int *a) {// 引数でaのアドレスを受け取る
|
42
|
+
|
43
|
+
*a = 200;// 引数で受け取ったアドレスが指しているaの中身を200に変更するので呼び出し元に影響する
|
44
|
+
|
45
|
+
}
|
46
|
+
|
47
|
+
void sample() {
|
48
|
+
|
49
|
+
int a = 10;// aの値は10
|
50
|
+
|
51
|
+
test1(a);// 10を渡す
|
52
|
+
|
53
|
+
printf("%d\n", a);// test1 の中でaが100に変更されているけど呼び出し元のここではaは10のまま変化ないので10と表示される
|
54
|
+
|
55
|
+
test2(&a);// 値が変化していない10が入ってるaのアドレスを渡す
|
56
|
+
|
57
|
+
printf("%d\n", a);// test2 の中でaの値が200に変更されたので呼び出し元のここではaは200になっているため200と表示される
|
58
|
+
|
59
|
+
}
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
```
|