C言語関係掲示板

過去ログ

No.508.staticを付けた配列の初期化

[戻る] [ホームページ]
No.3913

配列初期化について
投稿者---キンパル(2002/12/17 10:30:14)


はじめまして
キンパルと申します
最近VC++を利用してC言語の勉強をはじめました。
何冊かの入門書を利用しているのですが
ある入門書に配列を初期化するにはstaticをつけ
static int a[10] = {1,2,3};
とすると書いてありました。
しかし他の入門書には配列の初期化は
int a[10] = {1,2,3};
とかいてあります。
またstaticとは静的変数宣言となっております。
私はstaticとは静的変数宣言につかうものだと思い込んでいます。
ですから
static int a[10] = {1,2,3};
とするとただ配列aを初期化したものを静的変数にしただけだと思うのです。
配列の初期化についてとstaticの事をだれか教えてください。
混乱しています。
お願いします。


No.3914

Re:配列初期化について
投稿者---かずま(2002/12/17 10:54:06)


> 配列の初期化についてとstaticの事をだれか教えてください。
int a[10] = { 1, 2, 3 };
static int b[10] = { 1, 2, 3 };

void func(void)
{
    int c[10] = { 1, 2, 3 };
    static int d[10] = { 1, 2, 3 };
}
a と b と d は、静的変数です。プログラム実行開始時に既に初期化されています。
c は、自動変数です。関数(またはブロック)に入ったときに、領域が確保され、
初期化が実行されます。入るたびに毎回実行されます。

では、a と b と d の違いは何かというと、

a は外部結合です。他のファイルから参照できます。
b は内部結合です。このファイル内で参照できます。
d は結合無しです。この関数(ブロック)内で参照できます。

No.3915

Re:配列初期化について
投稿者---キンパル(2002/12/17 11:08:19)


ありがとうございます。
少しだけ謎がとけました。
ですがさらに・・・
初期化とは一体なんなのですか?
私は配列の中に最初から値をいれておくものだと思い込んでいるのですが・・・
友人に質問した時の回答はstaticをつけて初期化するとつかわれていない配列の
中身が無くなる?
というものでしたが意味不明・・・
staticについては、かずまさんにわかりやすくおしえていただけたので理解できたのですが初期化というものがしっかりと理解できていません。
char a[5] = "adc";

static char a[5] = "abc";
また
グローバルでの宣言
char a[5] = "adc";

static char a[5] = "abc";

a[5]には違いがあるのですか?
中身にはなにがおきているのですか?

No.3916

Re:配列初期化について
投稿者---キンパル(2002/12/17 11:38:20)


すみません。
謎はすべてとけました。
初期化をしてやれば初期値を自分できめられますね。
ありがとうございました。