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

以下のプログラムを実行したときには計算機の中でどんな処理が行われるのか見てみましょう.

     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 7行目

     5	  int a, b;
     6
-->  7	  a = 7; b = 3;
     8	  hoge(a, b);
     9	  printf("%d %d\n", a, b);

pic01.png

step2 8行目

     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	}

pic02.png

step3 12行目

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

pic03.png

step4 14行目

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

pic04.png

step5 15行目

     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	}

pic05.png

step6 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	}

pic05.png

step7 実行結果

以上の実行の結果は

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

となる.

この場合,関数hoge()が受け取った値をいくらいじっても,元の世界(main()の世界)には反映されない

もどる


添付ファイル: filepic05.png 1847件 [詳細] filepic01.png 1923件 [詳細] filepic04.png 1864件 [詳細] filepic02.png 1841件 [詳細] filepic03.png 1396件 [詳細]

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