関数を使うときにポインタが必要になるのはなんで? プログラム例その二

こんどは以下のプログラム例を考えてみよう.

     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()へ)

     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	}

pic06.png

step2 12行目

--> 12	void hoge(int x, int *y)
    13	{
    14	  *y = x + *y;
    15	  printf("%d %d\n", x, *y);
    16	}

pic07.png

step3 14行目

    12	void hoge(int x, int *y)
    13	{
--> 14	  *y = x + *y;
    15	  printf("%d %d\n", x, *y);
    16	}

pic08.png

step4 15行目

    12	void hoge(int x, int *y)
    13	{
    14	  *y = x + *y;
--> 15	  printf("%d %d\n", x, *y);
    16	}

pic09.png

step5 9行目

     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	}

pic09.png

step6 実行結果

以上の実行の結果は

7 10   ← 15行目のprintf()の出力
7 10   ←  9行目のprintf()の出力

となる.関数hoge()がポインタとして番地を受け取った変数については,元の世界(main()の世界)の値が直接いじられることになる.

もどる


添付ファイル: filepic06.png 2039件 [詳細] filepic07.png 2032件 [詳細] filepic09.png 1956件 [詳細] filepic08.png 1986件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-08-13 (水) 13:45:19