Programming Place Plus トップページ – C言語編 – 第22章
問題① 次のプログラムの実行結果を答えてください。
#include <stdio.h>
int num = 100;
void func(void);
int main(void)
{
{
int num = 300;
( "%d\n", num );
printf}
();
func( "%d\n", num );
printf}
void func(void)
{
int num = 200;
( "%d\n", num );
printf{
( "%d\n", num );
printf}
}
実行結果は次のようになります。
実行結果:
300
200
200
100
main関数の最初にある printf関数では、同じブロック内にある変数num の値が出力されます。
次に、func関数内にある 2つの printf関数ですが、これはいずれも func関数内の変数num の値が出力されます。
main関数に戻ってきた後の printf関数では、その位置から可視なのは、グローバル変数の num だけですから、 グローバル変数の num の値が出力されます。
ルールとしては、今実行している箇所と同じブロックが優先され、 そこから外へ外へとスコープを広げて、宣言を探しにいくということです。
問題② 呼び出すたびに 0、1、2 … という具合に増加する整数を出力する myprint関数を作ってください。
グローバル変数を使って実現できます。
#include <stdio.h>
int gNum = 0;
void myprint(void);
int main(void)
{
for( int i = 0; i < 5; ++i ){
();
myprint}
}
void myprint(void)
{
( "%d\n", gNum );
printf++gNum;
}
実行結果:
0
1
2
3
4
問題③ 次のようなプログラムがあります。
#include <stdio.h>
int num = 100;
int main(void)
{
int num;
= 10;
num ( "%d\n", num );
printf( "%d\n", num ); // グローバル変数の方を出力したい
printf}
コメントの箇所にある printf関数で、グローバル変数の方の num の値を出力できるように、 プログラムを書き換えてください。
一番早いのは、ブロックを作ることです。
#include <stdio.h>
int num = 100;
int main(void)
{
{
int num;
= 10;
num ( "%d\n", num );
printf}
( "%d\n", num ); // グローバル変数の方を出力したい
printf}
実行結果:
10
100
変数名を変えてしまっても良いのなら、グローバル変数の名前を変えてしまう方が良いでしょう。
#include <stdio.h>
int gNum = 100;
int main(void)
{
int num;
= 10;
num ( "%d\n", num );
printf( "%d\n", gNum ); // グローバル変数の方を出力したい
printf}
実行結果:
10
100
return 0;
を削除(C言語編全体でのコードの統一)’2018/2/25 全面的に文章を見直し、修正を行った。
’2014/1/11 サンプルプログラムに含まれていた余計なコードを削除。
’2009/7/18 新規作成。
Programming Place Plus のトップページへ