2.3 例題(1)

  3.例題2-3 局所的スコープ
 以下のプログラムを実行したときに、その出力は、
address of i (in main)  lval_1 = ADDRESS1
value of i   (in main)  val_1  = VALUE1
address of i (in test)  lval_2 = ADDRESS2
value of i   (in test)  val_2  = VALUE2
value of i   (in test)  val_3  = VALUE3
value of i   (in main)  val_4  = VALUE4
のようになります。このとき、
Q1: ADDRESS1 と ADDRESS2 は等しくなりますか?
Q2: VALUE1, VALUE2, VALUE3, VALUE4 の値はどうなりますか?
 なお、下のプログラムで変換文字%pは、変数のメモリアドレスの表示に用いられるものです。
(a)プログラムリスト

#include <stdio.h>

void test(int i);

int main(void)
{
  int i;
  /* main() における変数 i の記憶場所の表示 */
  printf("address of i (in main)  lval_1 = %p\n",&i);

  i = 10;
  /* main() 内 における変数 i の値の表示 */
  printf("value of i   (in main)  val_1  = %d\n",i);
  test(i);
  printf("value of i   (in main)  val_4  = %d\n",i);
}

void test(int i)
{
  /* test() における変数 i の記憶場所の表示 */
  printf("address of i (in test)  lval_2 = %p\n",&i);


  /* 関数 test() 内 における変数 i の値の表示 */
  printf("value of i   (in test)  val_2  = %d\n",i);
  i = 20;
  printf("value of i   (in test)  val_3  = %d\n",i);
}

(b)結果
Q1の答え:
ADDRESS1 と ADDRESS2は値(記憶番地)が異なる。
Q2の答え:
VALUE1 = 10
VALUE2 = 10
VALUE3 = 20
VALUE4 = 10

※実際にプログラムを実行して確かめてみよう。