サンプルプログラム init.c
(7-3)初期値を持つ変数(静的変数)
グローバル変数でも(static宣言された)ローカル変数でも静的変数であれば変数の宣言時に初期値を与えることができます。 静的変数に初期値を与える場合、その初期値で初期化されるのはインスタンス起動時の1回だけです。
#include <stdio.h>
int s = 1;
int arr[3] = { 1, 2, 3 };
char *str = "Hello World";
void main( void )
{
int i;
printf( "s = %d\n", s );
for( i = 0; i < 3; i++ ) {
printf( "arr[%d] = %d\n", i, arr[i] );
}
printf( "%s\n\n", str );
// 以下、補足のためのコード
for( i = 0; str[i]; i++ ) {
printf( "%c\n", str[i] );
}
}
上記プログラムの実行結果は、
s = 1 arr[0] = 1 arr[1] = 2 arr[2] = 3 Hello World H e l l o W o r l d
となります。
ここでちょっと文字列について補足しておきます。
プログラムリストの5行目の
char *str = "Hello World";
の部分は"Hello World"という文字列(の先頭アドレス値)をchar型のポインタstrに代入しています。
文字列とは文字データの配列のようなもので最後は必ずヌル文字(=0)で終わります。
実際、ポインタは配列と同じような書き方ができます。
プログラムリストの一番下のforループのところをご覧ください。
ここではポインタstrを配列のように使っていて、printf文で1文字ずつ出力しています。
ただし、このようにポインタを配列のように使うのはお勧めできません。
なぜならこのような使い方をしているとポインタなのか配列なのか分からなくなってしまうからです。
ポインタとして宣言したらポインタとしての書き方をした方が後でプログラムを見直すようなときも分かりやすいと思います。