回答編集履歴

4

重複的な内容のコードを削除

2021/10/28 10:15

投稿

fj68
fj68

スコア752

test CHANGED
@@ -59,50 +59,6 @@
59
59
 
60
60
 
61
61
  `hundred2(int** b)`は逆に`int`型のポインタのポインタとなっているため、引数の中身(`int`型の値)にアクセスするには`**b`と2回 **デリファレンス** する必要があります。
62
-
63
- これも以下のようなコードで確認できます。
64
-
65
-
66
-
67
- ```c
68
-
69
- #include <stdio.h>
70
-
71
-
72
-
73
- void hundred2(int** i) {
74
-
75
- // *i = 100; // 「intをint*にキャスト無しで代入してるけど大丈夫?」という警告が出るので試してみましょう
76
-
77
- **i = 100;
78
-
79
- return;
80
-
81
- }
82
-
83
-
84
-
85
- int main() {
86
-
87
- int a = 50;
88
-
89
- int* b = &a;
90
-
91
-
92
-
93
- printf("a = %d\n", a);
94
-
95
- hundred2(&b); // ポインタのポインタを渡す
96
-
97
- printf("a = %d\n", a);
98
-
99
-
100
-
101
- return 0;
102
-
103
- }
104
-
105
- ```
106
62
 
107
63
 
108
64
 

3

コードを追加

2021/10/28 10:15

投稿

fj68
fj68

スコア752

test CHANGED
@@ -16,15 +16,103 @@
16
16
 
17
17
  `hundred1(int a)`は引数が`int`型なので値そのものがコピーして渡されますから、書き換えられたとしても関数を抜けるとその値は保存されないので意味がないでしょう。
18
18
 
19
+ 以下のようなコードを書いて実行すると確認できます。
20
+
21
+
22
+
23
+ ```c
24
+
25
+ #include <stdio.h>
26
+
27
+
28
+
29
+ void hundred1(int i) {
30
+
31
+ i = 100; // 引数を書き換えてみるが……
32
+
33
+ return;
34
+
35
+ }
36
+
37
+
38
+
39
+ int main() {
40
+
41
+ int a = 50;
42
+
43
+
44
+
45
+ printf("a = %d\n", a);
46
+
47
+ hundred1(a);
48
+
49
+ printf("a = %d\n", a);
50
+
51
+
52
+
53
+ return 0;
54
+
55
+ }
56
+
57
+ ```
58
+
19
59
 
20
60
 
21
61
  `hundred2(int** b)`は逆に`int`型のポインタのポインタとなっているため、引数の中身(`int`型の値)にアクセスするには`**b`と2回 **デリファレンス** する必要があります。
62
+
63
+ これも以下のようなコードで確認できます。
64
+
65
+
66
+
67
+ ```c
68
+
69
+ #include <stdio.h>
70
+
71
+
72
+
73
+ void hundred2(int** i) {
74
+
75
+ // *i = 100; // 「intをint*にキャスト無しで代入してるけど大丈夫?」という警告が出るので試してみましょう
76
+
77
+ **i = 100;
78
+
79
+ return;
80
+
81
+ }
82
+
83
+
84
+
85
+ int main() {
86
+
87
+ int a = 50;
88
+
89
+ int* b = &a;
90
+
91
+
92
+
93
+ printf("a = %d\n", a);
94
+
95
+ hundred2(&b); // ポインタのポインタを渡す
96
+
97
+ printf("a = %d\n", a);
98
+
99
+
100
+
101
+ return 0;
102
+
103
+ }
104
+
105
+ ```
106
+
107
+
108
+
109
+ ---
22
110
 
23
111
 
24
112
 
25
113
  ポインタについてまだ十分な理解ができていないのかなと愚推します。
26
114
 
27
- その場合は以下を読んでしっかり理解しましょう。
115
+ その場合は以下を読んでいろいろとコードを書いて、しっかり理解しましょう。
28
116
 
29
117
 
30
118
 
@@ -69,3 +157,13 @@
69
157
  }
70
158
 
71
159
  ```
160
+
161
+
162
+
163
+ ---
164
+
165
+
166
+
167
+ コメントを参考に回答を改善しました。
168
+
169
+ みなさんありがとうございます。

2

コード修正

2021/10/28 09:38

投稿

fj68
fj68

スコア752

test CHANGED
@@ -38,6 +38,10 @@
38
38
 
39
39
  ```c
40
40
 
41
+ #include <stdio.h>
42
+
43
+
44
+
41
45
  void hundred(int* i) {
42
46
 
43
47
  *i = 100; // ポインタが指し示す先の値を変更する

1

コード修正

2021/10/28 08:23

投稿

fj68
fj68

スコア752

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  ポインタについてまだ十分な理解ができていないのかなと愚推します。
26
26
 
27
- その場合は以下を読まれるとよいと思い
27
+ その場合は以下を読んでしっり理解ししょう
28
28
 
29
29
 
30
30
 
@@ -40,9 +40,9 @@
40
40
 
41
41
  void hundred(int* i) {
42
42
 
43
- *i = 100; // ポインタが指し示す先の値を変更する
43
+ *i = 100; // ポインタが指し示す先の値を変更する
44
44
 
45
- return;
45
+ return;
46
46
 
47
47
  }
48
48
 
@@ -50,17 +50,17 @@
50
50
 
51
51
  int main() {
52
52
 
53
- int a = 50;
53
+ int a = 50;
54
54
 
55
- printf("a = %d\n", a);
55
+ printf("a = %d\n", a);
56
56
 
57
- hundred(&a); // 変数を書き換えられるようにポインタを渡す
57
+ hundred(&a); // 変数を書き換えられるようにポインタを渡す
58
58
 
59
- // hundred1(a); // これだと値をコピーして渡しているので書き換えられない
59
+ // hundred1(a); // これだと値をコピーして渡しているので書き換えられない
60
60
 
61
- printf("a = %d\n", a);
61
+ printf("a = %d\n", a);
62
62
 
63
- return 0;
63
+ return 0;
64
64
 
65
65
  }
66
66