Docs/ポインタの話/func2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*関数を使うときにポインタが必要になるのはなんで? プログ...
#contents
こんどは以下のプログラム例を考えてみよう.
#pre{{
1 void hoge(int x, int *y);
2
3 main()
4 {
5 int a, b;
6
7 a = 7; b = 3;
8 hoge(a, &b);
9 printf("%d %d\n", a, b);
10 }
11
12 void hoge(int x, int *y)
13 {
14 *y = x + *y;
15 printf("%d %d\n", x, *y);
16 }
}}
**step1 8行目(main()からhoge()へ) [#z0eb5e78]
#pre{{
1 void hoge(int x, int *y);
2
3 main()
4 {
5 int a, b;
6
7 a = 7; b = 3;
--> 8 hoge(a, &b);
9 printf("%d %d\n", a, b);
10 }
11
12 void hoge(int x, int *y)
13 {
14 *y = x + *y;
15 printf("%d %d\n", x, *y);
16 }
}}
-main()は, &color(Red){変数aの値};と&color(Red){変数bの...
-hoge()は,それらを変数x,yとして受け取る.
-普通の(ポインタではない)変数uに対して,&uはその変数が...
-ポインタ変数の場合(int *p;のように宣言された場合),
--pには番地の情報が格納され,
--*pはその番地の中身を表す
&ref(pic06.png);
**step2 12行目 [#m72132b5]
#pre{{
--> 12 void hoge(int x, int *y)
13 {
14 *y = x + *y;
15 printf("%d %d\n", x, *y);
16 }
}}
-変数x,yのために新しい場所(0x1230,0x1234番地)が用意され...
&ref(pic07.png);
**step3 14行目 [#ge0c5381]
#pre{{
12 void hoge(int x, int *y)
13 {
--> 14 *y = x + *y;
15 printf("%d %d\n", x, *y);
16 }
}}
-変数xの値と&color(Red){変数yの値が表す番地の中身};を足し...
-変数yの値は0x1004だから,「変数yの値が表す番地」は0x1004
&ref(pic08.png);
**step4 15行目 [#jdc3e0df]
#pre{{
12 void hoge(int x, int *y)
13 {
14 *y = x + *y;
--> 15 printf("%d %d\n", x, *y);
16 }
}}
-変数xと&color(Red){*y};が出力される
-出力されるのは,0x1230番地の中身と,&color(Red){0x1004番...
&ref(pic09.png);
**step5 9行目 [#sd57a2a2]
#pre{{
1 void hoge(int x, int *y);
2
3 main()
4 {
5 int a, b;
6
7 a = 7; b = 3;
8 hoge(a, &b);
--> 9 printf("%d %d\n", a, b);
10 }
11
12 void hoge(int x, int *y)
13 {
14 *y = x + *y;
15 printf("%d %d\n", x, *y);
16 }
}}
-main()の世界に戻ってくる
-変数bの値,すなわち0x1004番地の中身は関数hoge()によって...
-変数aとbの値が出力される
&ref(pic09.png);
**step6 実行結果 [#w2a7d906]
以上の実行の結果は
#pre{{
7 10 ← 15行目のprintf()の出力
7 10 ← 9行目のprintf()の出力
}}
となる.関数hoge()が&color(Red){ポインタとして番地を受け...
[[もどる>Docs/ポインタの話#func2]]
終了行:
*関数を使うときにポインタが必要になるのはなんで? プログ...
#contents
こんどは以下のプログラム例を考えてみよう.
#pre{{
1 void hoge(int x, int *y);
2
3 main()
4 {
5 int a, b;
6
7 a = 7; b = 3;
8 hoge(a, &b);
9 printf("%d %d\n", a, b);
10 }
11
12 void hoge(int x, int *y)
13 {
14 *y = x + *y;
15 printf("%d %d\n", x, *y);
16 }
}}
**step1 8行目(main()からhoge()へ) [#z0eb5e78]
#pre{{
1 void hoge(int x, int *y);
2
3 main()
4 {
5 int a, b;
6
7 a = 7; b = 3;
--> 8 hoge(a, &b);
9 printf("%d %d\n", a, b);
10 }
11
12 void hoge(int x, int *y)
13 {
14 *y = x + *y;
15 printf("%d %d\n", x, *y);
16 }
}}
-main()は, &color(Red){変数aの値};と&color(Red){変数bの...
-hoge()は,それらを変数x,yとして受け取る.
-普通の(ポインタではない)変数uに対して,&uはその変数が...
-ポインタ変数の場合(int *p;のように宣言された場合),
--pには番地の情報が格納され,
--*pはその番地の中身を表す
&ref(pic06.png);
**step2 12行目 [#m72132b5]
#pre{{
--> 12 void hoge(int x, int *y)
13 {
14 *y = x + *y;
15 printf("%d %d\n", x, *y);
16 }
}}
-変数x,yのために新しい場所(0x1230,0x1234番地)が用意され...
&ref(pic07.png);
**step3 14行目 [#ge0c5381]
#pre{{
12 void hoge(int x, int *y)
13 {
--> 14 *y = x + *y;
15 printf("%d %d\n", x, *y);
16 }
}}
-変数xの値と&color(Red){変数yの値が表す番地の中身};を足し...
-変数yの値は0x1004だから,「変数yの値が表す番地」は0x1004
&ref(pic08.png);
**step4 15行目 [#jdc3e0df]
#pre{{
12 void hoge(int x, int *y)
13 {
14 *y = x + *y;
--> 15 printf("%d %d\n", x, *y);
16 }
}}
-変数xと&color(Red){*y};が出力される
-出力されるのは,0x1230番地の中身と,&color(Red){0x1004番...
&ref(pic09.png);
**step5 9行目 [#sd57a2a2]
#pre{{
1 void hoge(int x, int *y);
2
3 main()
4 {
5 int a, b;
6
7 a = 7; b = 3;
8 hoge(a, &b);
--> 9 printf("%d %d\n", a, b);
10 }
11
12 void hoge(int x, int *y)
13 {
14 *y = x + *y;
15 printf("%d %d\n", x, *y);
16 }
}}
-main()の世界に戻ってくる
-変数bの値,すなわち0x1004番地の中身は関数hoge()によって...
-変数aとbの値が出力される
&ref(pic09.png);
**step6 実行結果 [#w2a7d906]
以上の実行の結果は
#pre{{
7 10 ← 15行目のprintf()の出力
7 10 ← 9行目のprintf()の出力
}}
となる.関数hoge()が&color(Red){ポインタとして番地を受け...
[[もどる>Docs/ポインタの話#func2]]
ページ名: