回答編集履歴

6

もう少し適切な表現に修正しました。

2016/05/26 05:17

投稿

toko
toko

スコア144

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関数に戻った際には`p`はそのアドレスを指しません。
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

もう少し追記しました。

2016/05/26 05:17

投稿

toko
toko

スコア144

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

コードの囲みを追加しました。

2016/05/26 02:50

投稿

toko
toko

スコア144

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

内容を修正しました。

2016/05/26 02:43

投稿

toko
toko

スコア144

test CHANGED
@@ -18,16 +18,16 @@
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
- *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

急ぎ修正しただけだったのでもう少し追記

2016/05/26 02:21

投稿

toko
toko

スコア144

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 = アドレス)のではなく、pが指す領域に値が入るよう(*p = )にする
31
+ 2. fun内でpに値を代入する(p = &i)のではなく、pが指す領域に値が入るよう(*p = i)にする
10
32
 
11
33
  と良いと思います。

1

正確性にかけていたので修正しました。

2016/05/26 02:15

投稿

toko
toko

スコア144

test CHANGED
@@ -1,9 +1,11 @@
1
- 関数funcの仮引数なっいる変数`i`は、関数func中でみしかアクセスきません
1
+ エラーては、他の回答者の通り、main関数p値が初期化されていないことが原因
2
2
 
3
- `p=&i;`の部分で変数`i`のポインタを変数`p`に代入していますが、
4
3
 
5
- 関数funcをreturnした後では、変数`p`はもはやアクセス出来ない場所を指していることになります。
6
4
 
7
- しかしfuncを呼び出した後に`printf("%d\n",*p);`部分でアクセス出来ない場所参照しようしていま
5
+ またプログラム修正するとするならば、
8
6
 
7
+ 1. main関数内でpが妥当な領域をさせるようにする
8
+
9
+ 2. fun内でpに値を代入する(p = アドレス)のではなく、pが指す領域に値が入るよう(*p = 値)にする
10
+
9
- このこが原因でエラーが出ています。
11
+ と思います。