回答編集履歴
6
もう少し適切な表現に修正しました。
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
エラーとしては、他の回答者の通り、main関数内のpの値が初期化されていないことが原因です。
|
1
|
+
エラーとしては、他の回答者の通り、main関数内の`p`の値が初期化されていないことが原因です。
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -18,7 +18,9 @@
|
|
18
18
|
|
19
19
|
について、
|
20
20
|
|
21
|
-
1. `p=&i;`にて変数`i`のアドレスを代入していますが、main関数
|
21
|
+
1. `p=&i;`にて、関数func内の変数`p`に変数`i`のアドレスを代入していますが、main関数の変数`p`はそのアドレスを指しません。
|
22
|
+
|
23
|
+
(main関数の`p`と関数funcの`p`は別の変数であるため。)
|
22
24
|
|
23
25
|
2. 変数`p`はmain関数で初期化されていないので、`printf("%d\n",*p);`で参照した時に妥当なアドレスを見ていません。(ここでエラー)
|
24
26
|
|
5
もう少し追記しました。
test
CHANGED
@@ -26,8 +26,10 @@
|
|
26
26
|
|
27
27
|
`printf("%d\n",*p);`で関数funcに与えた変数`i`の値を表示したいならば、
|
28
28
|
|
29
|
-
1. main関数内で`p`が妥当な領域を
|
29
|
+
1. main関数内で`p`が妥当な領域を指せるようにする(`p=&i`をfunc内ではなくてmain関数に書くなど)
|
30
30
|
|
31
|
-
2. fun内で`p`に値を代入する(`p = &i`)のではなく、`p`が指す領域に値が入るよう(`*p = i`)にする
|
31
|
+
2. 関数func内で`p`に値を代入する(`p = &i`)のではなく、`p`が指す領域に値が入るよう(`*p = i`)にする
|
32
|
+
|
33
|
+
|
32
34
|
|
33
35
|
と良いと思います。
|
4
コードの囲みを追加しました。
test
CHANGED
@@ -18,15 +18,15 @@
|
|
18
18
|
|
19
19
|
について、
|
20
20
|
|
21
|
-
1. `p=&i;`にて変数`i`のアドレスを代入していますが、main関数に戻った際にはpはそのアドレスを指しません。
|
21
|
+
1. `p=&i;`にて変数`i`のアドレスを代入していますが、main関数に戻った際には`p`はそのアドレスを指しません。
|
22
22
|
|
23
|
-
2. 変数`p`はmain関数で初期化されていないので、printf("%d\n",*p);で参照した時に妥当なアドレスを見ていません。(ここでエラー)
|
23
|
+
2. 変数`p`はmain関数で初期化されていないので、`printf("%d\n",*p);`で参照した時に妥当なアドレスを見ていません。(ここでエラー)
|
24
24
|
|
25
25
|
|
26
26
|
|
27
27
|
`printf("%d\n",*p);`で関数funcに与えた変数`i`の値を表示したいならば、
|
28
28
|
|
29
|
-
1. main関数内でpが妥当な領域をさせるようにする
|
29
|
+
1. main関数内で`p`が妥当な領域をさせるようにする
|
30
30
|
|
31
31
|
2. fun内で`p`に値を代入する(`p = &i`)のではなく、`p`が指す領域に値が入るよう(`*p = i`)にする
|
32
32
|
|
3
内容を修正しました。
test
CHANGED
@@ -18,16 +18,16 @@
|
|
18
18
|
|
19
19
|
について、
|
20
20
|
|
21
|
-
1. `p=&i;`にて変数iのアドレスを代入していますが、
|
21
|
+
1. `p=&i;`にて変数`i`のアドレスを代入していますが、main関数に戻った際にはpはそのアドレスを指しません。
|
22
22
|
|
23
|
-
2. `pはmain関数で初期化されていないので、printf("%d\n",*p);で参照した時に妥当なアドレスを見ていません。(ここでエラー)
|
23
|
+
2. 変数`p`はmain関数で初期化されていないので、printf("%d\n",*p);で参照した時に妥当なアドレスを見ていません。(ここでエラー)
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
-
*pで関数funcに与えたiの値を
|
27
|
+
`printf("%d\n",*p);`で関数funcに与えた変数`i`の値を表示したいならば、
|
28
28
|
|
29
29
|
1. main関数内でpが妥当な領域をさせるようにする
|
30
30
|
|
31
|
-
2. fun内でpに値を代入する(p = &i)のではなく、pが指す領域に値が入るよう(*p = i)にする
|
31
|
+
2. fun内で`p`に値を代入する(`p = &i`)のではなく、`p`が指す領域に値が入るよう(`*p = i`)にする
|
32
32
|
|
33
33
|
と良いと思います。
|
2
急ぎ修正しただけだったのでもう少し追記
test
CHANGED
@@ -2,10 +2,32 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
+
```C
|
6
|
+
|
7
|
+
void func(int *p,int i){
|
8
|
+
|
9
|
+
i=100;
|
10
|
+
|
11
|
+
p=&i;
|
12
|
+
|
13
|
+
return;
|
14
|
+
|
15
|
+
}
|
16
|
+
|
17
|
+
```
|
18
|
+
|
19
|
+
について、
|
20
|
+
|
21
|
+
1. `p=&i;`にて変数iのアドレスを代入していますが、関数mainに戻った際にはpはそのアドレスを指しません。
|
22
|
+
|
23
|
+
2. `pはmain関数で初期化されていないので、printf("%d\n",*p);で参照した時に妥当なアドレスを見ていません。(ここでエラー)
|
24
|
+
|
25
|
+
|
26
|
+
|
5
|
-
|
27
|
+
*pで関数funcに与えたiの値を代入するならば、
|
6
28
|
|
7
29
|
1. main関数内でpが妥当な領域をさせるようにする
|
8
30
|
|
9
|
-
2. fun内でpに値を代入する(p =
|
31
|
+
2. fun内でpに値を代入する(p = &i)のではなく、pが指す領域に値が入るよう(*p = i)にする
|
10
32
|
|
11
33
|
と良いと思います。
|
1
正確性にかけていたので修正しました。
test
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
|
1
|
+
エラーとしては、他の回答者の通り、main関数内のpの値が初期化されていないことが原因です。
|
2
2
|
|
3
|
-
`p=&i;`の部分で変数`i`のポインタを変数`p`に代入していますが、
|
4
3
|
|
5
|
-
関数funcをreturnした後では、変数`p`はもはやアクセス出来ない場所を指していることになります。
|
6
4
|
|
7
|
-
|
5
|
+
また、プログラムの修正をするとするならば、
|
8
6
|
|
7
|
+
1. main関数内でpが妥当な領域をさせるようにする
|
8
|
+
|
9
|
+
2. fun内でpに値を代入する(p = アドレス)のではなく、pが指す領域に値が入るよう(*p = 値)にする
|
10
|
+
|
9
|
-
|
11
|
+
と良いと思います。
|