Powered by SmartDoc

ソフトウェア概論A/B (2012/10/12)
Ver. 1.0

2012年10月12日
栗野 俊一
kurino@math.cst.nihon-u.ac.jp
http://edu-gw2.math.cst.nihon-u.ac.jp/~kurino/2012/soft/soft.html
ソフトウェア概論 A/B2012年10月12日 の資料

目次

講義資料

当日の OHP 資料

当日のOHP資料です。

追加ファイル

  1. s_print.hと同じフォルダに保存する。
  2. s_print.hと同じフォルダに保存する。

講義で利用するサンプルプログラム

sample-001

Download : sample-001.c ( SJIS 版 )

sample-001.c
/*
 * 2012/10/05 sample-001.c
 */

#include <stdio.h>
#include "s_print.h"
#include "s_memory.h"	/* memory モデルを理解するための関数定義 */

/*
 *
 */

int main ( void ) {

  /*
   * メモリの操作 ( 情報の記録 : set_memory_value_at )
   */

	set_memory_value_at ( 100, 1 );		/* 100 番地のセルに 1 を記録する */
	set_memory_value_at ( 101, 10 );	/* 101 番地のセルに 10 を記録する */

  /*
   * メモリの操作 ( 情報の参照 : get_memory_value_at )
   */

	s_print_string ( "100 番地のセルに記録されている数値は " );
	s_print_int ( get_memory_value_at ( 100 ) );
	s_print_string ( " です。\n" );

	s_print_string ( "101 番地のセルに記録されている数値は " );
	s_print_int ( get_memory_value_at ( 101 ) );
	s_print_string ( " です。\n" );

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-001.c の実行結果
C:\usr\c>sample-001
100 番地のセルに記録されている数値は 1 です。
101 番地のセルに記録されている数値は 10 です。
C:\usr\c> 

sample-002

Download : sample-002.c ( SJIS 版 )

sample-002.c
/*
 * 2012/10/05 sample-002.c
 */

#include <stdio.h>
#include "s_print.h"
#include "s_memory.h"	/* memory モデルを理解するための関数定義 */

/*
 *	print_memory_value
 *		指定された address の記憶セルの内容を画面に出力する
 */

void print_memory_value ( int address ) {

	s_print_int ( address );
	s_print_string ( " 番地のセルに記録されている数値は " );
	s_print_int ( get_memory_value_at ( address ) );
	s_print_string ( " です。\n" );

}

/*
 *
 */

int main ( void ) {

  /*
   * メモリの参照 : 一度記録した情報は何度でも参照できる
   */

	set_memory_value_at ( 100, 1 );		/* 100 番地のセルに 1 を記録する */

	print_memory_value ( 100 );			/* 100 番地のセルの内容を出力 (一度目) */
	print_memory_value ( 100 );			/* 二度目 */
	print_memory_value ( 100 );			/* 三度目 */

		/*
		 * 参照は何度行っても、同じ情報が得られる
		 */

  /*
   * 記憶の破壊 : 新しい情報を記録すると以前の記録は失われる
   */

	set_memory_value_at ( 100, 99 );	/* 100 番地のセルに 99 を記録する */

	print_memory_value ( 100 );			/* 100 番地のセルの内容を出力 */

		/*
		 * 新しい情報を記憶すると以前の記録された情報は失われる
		 */

  /*
   * 記録は最後のものだけ ( 参照の有無と無関係に最後のものだけを記録 )
   */

	set_memory_value_at ( 100, 21 );	/* 100 番地のセルに 21 を記録する */
	set_memory_value_at ( 100, 22 );	/* 100 番地のセルに 22 を記録する */
	set_memory_value_at ( 100, 23 );	/* 100 番地のセルに 23 を記録する */

	print_memory_value ( 100 );			/* 100 番地のセルの内容を出力 */

		/*
		 * 記録されている情報は最後に記録された物だけ
		 */

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-002.c の実行結果
C:\usr\c>sample-002
100 番地のセルに記録されている数値は 1 です。
100 番地のセルに記録されている数値は 1 です。
100 番地のセルに記録されている数値は 1 です。
100 番地のセルに記録されている数値は 99 です。
100 番地のセルに記録されている数値は 23 です。
C:\usr\c> 

sample-003

Download : sample-003.c ( SJIS 版 )

sample-003.c
/*
 * 2012/10/05 sample-003.c
 */

#include <stdio.h>
#include "s_print.h"
#include "s_memory.h"	/* memory モデルを理解するための関数定義 */

/*
 *	print_memory_value
 *		指定された address の記憶セルの内容を画面に出力する
 */

void print_memory_value ( int address ) {

	s_print_int ( address );
	s_print_string ( " 番地のセルに記録されている数値は " );
	s_print_int ( get_memory_value_at ( address ) );
	s_print_string ( " です。\n" );

}

/*
 *
 */

int main ( void ) {

  /*
   * メモリセルの独立性 : 番地の異るセルは独立に振る舞う
   */

	set_memory_value_at ( 100, 1 );		/* 100 番地のセルに 1 を記録する */
	set_memory_value_at ( 101, 2 );		/* 101 番地のセルに 2 を記録する */

	print_memory_value ( 100 );			/* 100 番地のセルの内容を出力 */
	print_memory_value ( 101 );			/* 101 番地のセルの内容を出力 */

		/*
		 * 番地が異れば、記録されている情報も異る
		 */

  /*
   * 記憶の独立性
   */

	set_memory_value_at ( 100, 99 );	/* 100 番地のセルに 99 を記録する */

	print_memory_value ( 100 );			/* 100 番地のセルの内容を出力 */
	print_memory_value ( 101 );			/* 101 番地のセルの内容を出力 */

		/*
		 * 100 番地の情報を書き換えても、101 番地の情報は影響しない
		 */

	set_memory_value_at ( 101, 88 );	/* 101 番地のセルに 88 を記録する */

	print_memory_value ( 100 );			/* 100 番地のセルの内容を出力 */
	print_memory_value ( 101 );			/* 101 番地のセルの内容を出力 */

		/*
		 * 逆も真なり
		 */

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-003.c の実行結果
C:\usr\c>sample-003<  sample-003.in
100 番地のセルに記録されている数値は 1 です。
101 番地のセルに記録されている数値は 2 です。
100 番地のセルに記録されている数値は 99 です。
101 番地のセルに記録されている数値は 2 です。
100 番地のセルに記録されている数値は 99 です。
101 番地のセルに記録されている数値は 88 です。
C:\usr\c> 

sample-004

Download : sample-004.c ( SJIS 版 )

sample-004.c
/*
 * 2012/10/05 sample-004.c
 */

#include <stdio.h>
#include "s_print.h"
#include "s_memory.h"	/* memory モデルを理解するための関数定義 */

/*
 *	print_memory_value
 *		指定された address の記憶セルの内容を画面に出力する
 */

void print_memory_value ( int address ) {

	s_print_int ( address );
	s_print_string ( " 番地のセルに記録されている数値は " );
	s_print_int ( get_memory_value_at ( address ) );
	s_print_string ( " です。\n" );

}

/*
 *
 */

int main ( void ) {

  /*
   * メモリセルの容量
   */

	set_memory_value_at ( 100, 0 );		/* 100 番地のセルに 0 を記録する */
	print_memory_value ( 100 );			/* 100 番地のセルの内容を出力 */

	set_memory_value_at ( 100, 100 );	/* 100 番地のセルに 100 を記録する */
	print_memory_value ( 100 );			/* 100 番地のセルの内容を出力 */

	set_memory_value_at ( 100, 255 );	/* 100 番地のセルに 255 を記録する */
	print_memory_value ( 100 );			/* 100 番地のセルの内容を出力 */

		/*
		 * 0 〜 255 ならば、記録できる
		 */

  /*
   * メモリセルの容量オーバー
   */

	set_memory_value_at ( 100, 300 );	/* 100 番地のセルに 300 を記録しようとした */
	print_memory_value ( 100 );			/* 100 番地のセルの内容を出力 */

		/*
		 * 300 は記憶されていない !!
		 * 	実は 300 を 256 で割った余り ( 44 ) が記録されている
		 *	256 を越る(オーバーする)情報は捨てられる !!
		 */

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-004.c の実行結果
C:\usr\c>sample-004
100 番地のセルに記録されている数値は 0 です。
100 番地のセルに記録されている数値は 100 です。
100 番地のセルに記録されている数値は 255 です。
100 番地のセルに記録されている数値は 44 です。
C:\usr\c> 

sample-005

Download : sample-005.c ( SJIS 版 )

sample-005.c
/*
 * 2012/10/05 sample-005.c
 */

#include <stdio.h>
#include "s_print.h"
#include "s_variable.h"	/* memory モデルを理解するための関数定義 */

/*
 *
 */

int main ( void ) {

  /*
   * C 言語の変数のメモリモデルによる理解
   */

	char cvar;		/* char 型の変数 cvar の宣言 */
	char dvar;		/* char 型の変数 dvar の宣言 */

	/*
	 * 変数はアドレスをもっている
	 */

	s_print_string ( "変数 cvar のアドレスは 16 進数表現で " );
	s_print_hex ( get_variable_address( cvar ) );
	s_print_string ( " です。\n" );

	s_print_string ( "変数 dvar のアドレスは 16 進数表現で " );
	s_print_hex ( get_variable_address( dvar ) );
	s_print_string ( " です。\n" );

		/*
		 * 変数名が異れば、番地も異っている
		 */

	/*
	 * 変数をアドレスを利用して参照
	 */

	cvar = 'c';			/* 変数 cvar に、値 'c' を代入 */
	dvar = 'D';			/* 変数 Dvar に、値 'D' を代入 */

	s_print_string ( "cvar に記録されている文字は " );
	s_print_char ( get_variable_value_at ( get_variable_address( cvar ) ) );
	s_print_string ( " です。\n" );

	s_print_string ( "dvar に記録されている文字は " );
	s_print_char ( get_variable_value_at ( get_variable_address( dvar ) ) );
	s_print_string ( " です。\n" );

	/*
	 * 変数をアドレスを利用して変更
	 */

	set_variable_value_at ( get_variable_address( cvar ), 'X' );
		/* 変数 cvar の所に 'X' を記録 */

	s_print_string ( "cvar は " );
	s_print_char ( cvar );
	s_print_string ( " です。\n" );

	set_variable_value_at ( get_variable_address( dvar ), 'y' );
		/* 変数 dvar の所に 'y' を記録 */

	s_print_string ( "dvar は " );
	s_print_char ( dvar );
	s_print_string ( " です。\n" );

  /*
   *
   */

    return 0;

}

/*
 *
 */
入力例
10
sample-005.c の実行結果
C:\usr\c>sample-005<  sample-005.in
変数 cvar のアドレスは 16 進数表現で bfa8359f です。
変数 dvar のアドレスは 16 進数表現で bfa8359e です。
cvar に記録されている文字は c です。
dvar に記録されている文字は D です。
cvar は X です。
dvar は y です。
C:\usr\c> 

sample-006

Download : sample-006.c ( SJIS 版 )

sample-006.c
/*
 * 2012/10/05 sample-006.c
 */

#include <stdio.h>
#include "s_print.h"
#include "s_variable.h"	/* memory モデルを理解するための関数定義 */

/*
 *
 */

int main ( void ) {

  /*
   * C 言語の文字列のメモリモデルによる理解
   */

	/*
	 * 文字列はアドレスをもっている
	 */

	s_print_string ( "文字列 \"abc\" のアドレスは 16 進数表現で " );
	s_print_hex ( get_string_address( "abc" ) );
	s_print_string ( " です。\n" );

	/*
	 * 文字列の要素をアドレスを利用して参照
	 */

	s_print_string ( "文字列 \"abc\" の先頭の文字は " );
	s_print_char ( get_variable_value_at ( get_string_address( "abc" ) ) );
	s_print_string ( " です。\n" );

	/*
	 * 文字列の要素の二つ目以後を
	 */

	s_print_string ( "文字列 \"abc\" の先頭の次の文字は " );
	s_print_char ( get_variable_value_at ( get_string_address( "abc" ) + 1 ) \
    );
	s_print_string ( " です。\n" );

	s_print_string ( "文字列 \"abc\" の先頭の次の次の文字は " );
	s_print_char ( get_variable_value_at ( get_string_address( "abc" ) + 2 ) \
    );
	s_print_string ( " です。\n" );

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-006.c の実行結果
C:\usr\c>sample-006
文字列 "abc" のアドレスは 16 進数表現で 8048dc7 です。
文字列 "abc" の先頭の文字は a です。
文字列 "abc" の先頭の次の文字は b です。
文字列 "abc" の先頭の次の次の文字は c です。
C:\usr\c> 

sample-007

Download : sample-007.c ( SJIS 版 )

sample-007.c
/*
 * 2012/10/05 sample-007.c
 */

#include <stdio.h>
#include "s_print.h"
#include "s_variable.h"	/* memory モデルを理解するための関数定義 */

/*
 *
 */

int main ( void ) {

  /*
   * C 言語の変数のメモリモデルによる理解
   */

	char cvar;		/* char 型の変数 cvar の宣言 */
	char dvar;		/* char 型の変数 dvar の宣言 */
	char evar;		/* char 型の変数 evar の宣言 */

	/*
	 * 変数を並べてて宣言すると (偶然..) アドレスが逆順で連続していた..
	 */

	s_print_string ( "変数 cvar のアドレスは 16 進数表現で " );
	s_print_hex ( get_variable_address( cvar ) );
	s_print_string ( " です。\n" );

	s_print_string ( "変数 dvar のアドレスは 16 進数表現で " );
	s_print_hex ( get_variable_address( dvar ) );
	s_print_string ( " です。\n" );

	s_print_string ( "変数 evar のアドレスは 16 進数表現で " );
	s_print_hex ( get_variable_address( evar ) );
	s_print_string ( " です。\n" );

	/*
	 * 変数をアドレスを利用して参照
	 */

	evar = 'c';			/* 変数 evar に、値 'c' を代入 */
	dvar = 'D';			/* 変数 dvar に、値 'D' を代入 */
	cvar = '\0';		/* 変数 cvar に、値 '\0' を代入 */

	s_print_string ( "evar の所から記録されている文字列は " );
	s_print_string ( get_variable_address( evar ) );
	s_print_string ( " です。\n" );

  /*
   *	アドレス経由で、変数の内容を変更
   */

   set_variable_value_at ( get_variable_address( evar ) + 1, 'x' );
		/* 変数 evar のアドレスの次のアドレスは dvar のアドレスなので.. */

	s_print_string ( "evar に記録されている文字は " );
	s_print_char ( evar );
	s_print_string ( " です。\n" );

		/* 結果的に、dvar の内容が書き変わる */

	s_print_string ( "dvar に記録されている文字は " );
	s_print_char ( dvar );
	s_print_string ( " です。\n" );

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-007.c の実行結果
C:\usr\c>sample-007
変数 cvar のアドレスは 16 進数表現で bfda689f です。
変数 dvar のアドレスは 16 進数表現で bfda689e です。
変数 evar のアドレスは 16 進数表現で bfda689d です。
evar の所から記録されている文字列は cD です。
evar に記録されている文字は c です。
dvar に記録されている文字は x です。
C:\usr\c> 

sample-008

Download : sample-008.c ( SJIS 版 )

sample-008.c
/*
 * 2012/10/05 sample-008.c
 */

#include <stdio.h>
#include "s_print.h"
#include "s_variable.h"	/* memory モデルを理解するための関数定義 */

/*
 *
 */

int main ( void ) {

  /*
   * C 言語の変数のメモリモデルによる理解
   */

	char carray[3];	/* char 型の一次元配列 carray の宣言 (サイズは 3)  */

		/*
			意味的には
				char carry[2];		-- cvar
				char carry[1];		-- dvar
				char carry[0];		-- evar
			のように考えて良い (cf. sample-007.c)
		*/

	/*
	 * 配列の要素のアドレスは連続している事が保証される
	 */

	s_print_string ( "変数 carray[2] のアドレスは 16 進数表現で " );
	s_print_hex ( get_variable_address( carray[2] ) );
	s_print_string ( " です。\n" );

	s_print_string ( "変数 carray[1] のアドレスは 16 進数表現で " );
	s_print_hex ( get_variable_address( carray[1] ) );
	s_print_string ( " です。\n" );

	s_print_string ( "変数 carray[0] のアドレスは 16 進数表現で " );
	s_print_hex ( get_variable_address( carray[0] ) );
	s_print_string ( " です。\n" );

	/*
	 * 変数をアドレスを利用して参照
	 */

	carray[0] = 'c';		/* 変数 carray[0] に、値 'c' を代入 */
	carray[1] = 'D';		/* 変数 carray[1] に、値 'D' を代入 */
	carray[2] = '\0';		/* 変数 carray[2] に、値 '\0' を代入 */

	s_print_string ( "carray[0] の所から記録されている文字列は " );
	s_print_string ( get_variable_address( carray[0] ) );
	s_print_string ( " です。\n" );

  /*
   *	アドレス経由で、変数の内容を変更
   */

   set_variable_value_at ( get_variable_address( carray[0] ) + 1, 'x' );
		/* 変数 carray[0] のアドレスの次のアドレスは carray[1] のアドレスなので.. */

	s_print_string ( "carray[0] に記録されている文字は " );
	s_print_char ( carray[0] );
	s_print_string ( " です。\n" );

		/* 結果的に、carray[1] の内容が書き変わる */

	s_print_string ( "carray[1] に記録されている文字は " );
	s_print_char ( carray[1] );
	s_print_string ( " です。\n" );

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-008.c の実行結果
C:\usr\c>sample-008
変数 carray[2] のアドレスは 16 進数表現で bfc77fbf です。
変数 carray[1] のアドレスは 16 進数表現で bfc77fbe です。
変数 carray[0] のアドレスは 16 進数表現で bfc77fbd です。
carray[0] の所から記録されている文字列は cD です。
carray[0] に記録されている文字は c です。
carray[1] に記録されている文字は x です。
C:\usr\c> 

sample-009

Download : sample-009.c ( SJIS 版 )

sample-009.c
/*
 * 2012/10/05 sample-009.c
 */

#include <stdio.h>
#include "s_print.h"
#include "s_variable.h"	/* memory モデルを理解するための関数定義 */

/*
 *
 */

int main ( void ) {

  /*
   * 
   */

	char carray[3];	/* char 型の一次元配列 carray の宣言 (サイズは 3)  */

	/*
	 * 配列の要素のアドレスは連続している事が保証される
	 */

	carray[0] = 'c';		/* 変数 carray[0] に、値 'c' を代入 */
	carray[1] = 'D';		/* 変数 carray[1] に、値 'D' を代入 */
	carray[2] = '\0';		/* 変数 carray[2] に、値 '\0' を代入 */

	/*
	  				+------+
	  carray[0] 	| 'c'  |  <-----+
	  				+------+		|
		carray[1] 	| 'D'  |		+--- "cD" 文字列と同じ "cD"[0] = carray[0]
	  				+------+		|	=> "cD" == carray
	  carray[2] 	| '\0' |  <-----+
	  				+------+
	*/


	s_print_string ( "carray[0] の所から記録されている文字列は " );
	s_print_string ( get_variable_address( carray[0] ) );
	s_print_string ( " です。\n" );

  /*
   *	配列名は、文字列と同じように扱える
   */

	s_print_string ( "carray が表現している文字列は " );
	s_print_string ( carray );
	s_print_string ( " です。\n" );

  /*
   *	文字列の一部を変更する事ができる
   */

	carray[1] = 'U';		/* ニ文字目を 'U' に変更 */

	s_print_string ( "carray が表現している文字列は " );
	s_print_string ( carray );
	s_print_string ( " です。\n" );

	carray[0] = 'p';		/* 一字目を 'p' に変更 */

	s_print_string ( "carray が表現している文字列は " );
	s_print_string ( carray );
	s_print_string ( " です。\n" );

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-009.c の実行結果
C:\usr\c>sample-009
carray[0] の所から記録されている文字列は cD です。
carray が表現している文字列は cD です。
carray が表現している文字列は cU です。
carray が表現している文字列は pU です。
C:\usr\c> 

sample-010

Download : sample-010.c ( SJIS 版 )

sample-010.c
/*
 * 2012/10/05 sample-010.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 *
 */

int main ( void ) {

  /*
   * 	文字配列の初期化
   */

	char carray[3] = "AB";

		/*
			carray[0] = 'A';
			carray[1] = 'B';
			carray[2] = '\0';
		*/

	s_print_string ( "carray[0] は " );
	s_print_char ( carray[0] );
	s_print_string ( " です。\n" );

	s_print_string ( "carray[1] は " );
	s_print_char ( carray[1] );
	s_print_string ( " です。\n" );

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-010.c の実行結果
C:\usr\c>sample-010
carray[0] は A です。
carray[1] は B です。
C:\usr\c> 

sample-011

Download : sample-011.c ( SJIS 版 )

sample-011.c
/*
 * 2012/10/05 sample-011.c
 */

#include <stdio.h>
#include "s_print.h"
#include "s_variable.h"

/*
 *
 */

int main ( void ) {

  /*
   * 	アドレス演算子「&」と間接演算子「*」
   */

	char carray[3] = "AB";

  /*
   *	添字による参照
   */

	s_print_string ( "carry[0] = " );
	s_print_char ( carry[0] );
	s_print_newline();

	s_print_string ( "carry[1] = " );
	s_print_char ( carry[1] );
	s_print_newline();

  /*
   *	間接演算子による参照
   */

	s_print_string ( "*carry = " );
	s_print_char ( *carry );
	s_print_newline();

	s_print_string ( "*(carry+1) = " );
	s_print_char ( *(carry+1) );
	s_print_newline();

  /*
   *	address の比較
   */

	s_print_string ( "&carry[0] = " );
	s_print_hex ( &carry[0] );
	s_print_newline();

	s_print_string ( "carry = " );
	s_print_hex ( carry );
	s_print_newline();

  /*
   *	「&」と「*」
   */

	s_print_string ( "carry = " );
	s_print_hex ( carry  );
	s_print_newline();

	s_print_string ( "&*carry = " );
	s_print_hex ( &*carry  );
	s_print_newline();

	s_print_string ( "carry[0] = " );
	s_print_char ( carry[0]  );
	s_print_newline();

	s_print_string ( "*&carry[0] = " );
	s_print_char ( *&carry[0]  );
	s_print_newline();

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-011.c の実行結果
C:\usr\c>sample-011
carray[0] は A です。
carray[1] は B です。
C:\usr\c> 

講義中に作成したサンプルプログラム

本日の課題

課題 20121012-01

Download : 20121012-01.c ( SJIS 版 )

20121012-01.c
/*
 * DATE-DIR-QQQQ.c
 *	メモリ操作での和	
 *	s_memory.h を利用し、
 *	100 番地の内容と 101 番地の内容の和を 102 番地に入れるプログラムを作成しなさい
 */

/*
 *	
 */

#include <stdio.h>
#include "s_print.h"
#include "s_memory.h"

/*
 *	print_memory_value
 *		指定された address の記憶セルの内容を画面に出力する
 */

void print_memory_value ( int address ) {

	s_print_int ( address );
	s_print_string ( " 番地のセルに記録されている数値は " );
	s_print_int ( get_memory_value_at ( address ) );
	s_print_string ( " です。\n" );

}

/*
 *
 */

int main ( int argc, char *argv[] ) {

	/* 値の設定 */

  /*
   * メモリセルの容量
   */

	set_memory_value_at ( 100, 12 );	/* 100 番地のセルに 12 を記録する */
	set_memory_value_at ( 101, 78 );	/* 100 番地のセルに 78 を記録する */

	/*
	 *	100 番地の値と 101 番地の値の和を 102 番地にいれる
	 */


	/*
	**	 この部分を完成させなさい
	*/


	/*
	 * 結果の出力
	 */

	print_memory_value ( 102 );			/* 102 番地のセルの内容を出力 */

  return 0;
}

/*
 *
 */
20121012-01.c の実行結果
C:\usr\c\> 20121012-01
102 番地のセルに記録されている数値は 90 です。
C:\usr\c\> 

課題 20121012-02

Download : 20121012-02.c ( SJIS 版 )

20121012-02.c
/*
 * DATE-DIR-QQQQ.c
 * アドレスを利用した間接参照
 *	代入文を利用せず、s_variable.h を利用して、変数 cvar の値を 1 だけふやせ
 */

#include <stdio.h>
#include "s_print.h"
#include "s_variable.h"	/* memory モデルを理解するための関数定義 */

/*
 *
 */

int main ( void ) {

  /*
   * C 言語の変数のメモリモデルによる理解
   */

	char cvar = 'p';		/* char 型の変数 cvar の宣言 */

	s_print_string ( "cvar は " );
	s_print_char ( cvar );
	s_print_string ( " です。\n" );


	/*
	**	 この部分を完成させなさい
	*/


	s_print_string ( "cvar は " );
	s_print_char ( cvar );
	s_print_string ( " になりました。\n" );

  /*
   *
   */

    return 0;

}

/*
 *
 */
20121012-02.c の実行結果
C:\usr\c\> 20121012-02
cvar は p です。
cvar は q になりました。
C:\usr\c\>