ショッピングモール  レギュラー(その他)  インスタント  コーヒー(ソフトドリンク)  ココア


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.5039

配列の中身
投稿者---きぃ(2005/12/07 01:24:50)


はじめまして。C言語を始めたばかりでわからないことがあるので
質問させてもらいました。
配列でi[10]というのを作り5まで文字や数字を入れただけの場合は
6にはNULLが入っているのでしょうか?
gccでMac OSXを使っています。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:配列の中身 5040 かずま 2005/12/07 02:36:15
<子記事> Re:配列の中身 5084 nop 2005/12/11 00:27:14


No.5040

Re:配列の中身
投稿者---かずま(2005/12/07 02:36:15)


> 配列でi[10]というのを作り5まで文字や数字を入れただけの場合は
> 6にはNULLが入っているのでしょうか?

どこでどのように配列の宣言をするかで変わってきます。
#include <stdio.h>

static int a[10];
int b[10];

int main(void)
{
    static int c[10];
    int d[10];
    int i;

    for (i = 0; i < 5; i++)
        a[i] = b[i] = c[i] = d[i] = i;
    for (i = 0; i < 10; i++)
        printf("%d %d %d %d\n", a[i], b[i], c[i], d[i]);
    return 0;
}
d は自動変数なので、初期化されません。何が入っているかわかりません。
a, b, c は静的変数なので、0 で初期化されています。
a, b, c がポインタの配列だったら、NULL で初期化されているといっても
かまいませんが、int の配列の場合は 0 で初期化されているといいます。


この投稿にコメントする

削除パスワード

No.5041

Re:配列の中身
投稿者---きぃ(2005/12/07 10:08:39)


おかげで解決しました。
かずまさんありがとうございました。


この投稿にコメントする

削除パスワード

No.5074

Re:配列の中身
投稿者---かずま(2005/12/08 02:39:15)


> おかげで解決しました。

本当に解決したのですか?

それなら、a と b の違い、a と c の違いは何かを説明してください。


この投稿にコメントする

削除パスワード

No.5253

Re:配列の中身
投稿者---通りすがり(2006/01/12 15:50:46)


>それなら、a と b の違い、a と c の違いは何かを説明してください。

通りすがりの初心者ですが、
a:static修飾したグローバル変数
b:グローバル変数
c:static修飾したローカル変数
a,b,cともに静的変数ですよね?


この投稿にコメントする

削除パスワード

No.5255

Re:配列の中身
投稿者---kz3(2006/01/13 07:57:02)


>>それなら、a と b の違い、a と c の違いは何かを説明してください。

きぃさんに理解を確認しているのに他の人が答えちゃ^^;
といいつつもう遅いので私も・・・。

>通りすがりの初心者ですが、
>a:static修飾したグローバル変数 -> △
>b:グローバル変数 -> △
>c:static修飾したローカル変数 -> △
>a,b,cともに静的変数ですよね? -> △

△というのは説明不足という意味です。

static int a[10];       // ・プログラム実行時1度だけ初期化(0クリア)される静的変数

                        // ・このファイル内のどこからでも参照可能な変数

                        // ・外部(ファイル)から参照されない変数

                    
int b[10];              // ・初プログラム実行時に1度だけ初期化される外部変数

                        // ・このファイル内のどこからでも参照可能な変数

                        // ・外部からexternによって参照可能な変数


int main()
{
    static int c[10];   // ・プログラム実行時に1度だけ初期化される静的局所変数

                        // ・関数から抜けても値を保持し続ける

    int d[10];          // ・初期化のされない局所変数

                        // ・関数から抜けると元の値を保持しない

    return 0;
}


・関数内で宣言された変数は関数内でしか参照されない局所変数となり、
static記憶クラスは初期化の有無と値の保持の性質だけを決定する。

・関数外で宣言された変数は外部変数となり、
ファイル内のどこからでも参照可能な変数となり、
また外部ファイルのextern記憶クラスによって外部からも参照される変数となる。
ただしstaticを指定した外部変数は外部から参照されないファイル内でのみ
参照可能な静的変数となる。

ということをまとめると、静的という言葉は、
宣言した位置の外からは参照することが出来ない起動時に1回だけ初期化される変数ということになる。

よってbは外部から参照可能な変数なので"静的"とは呼ばず単にグローバル変数外部変数と呼ばれる。

まぁ重要なのはそれぞれの性質で呼び方は大して重要ではなかったり。
私なら
a = 静的変数
b = 外部変数
c = 静的変数(静的局所変数)
d = 局所変数(自動変数)
と呼ぶと思います。aとcの違いは関数内外という違いが明らかなので
呼び名は一緒ですね。


この投稿にコメントする

削除パスワード

No.5084

Re:配列の中身
投稿者---nop(2005/12/11 00:27:14)


>配列でi[10]というのを作り5まで文字や数字を入れただけの場合は
>6にはNULLが入っているのでしょうか?

「NULL」は、「ポイントしていない事を示す特別なポインタ値」です。
配列の型がポインタ型でない限り、NULLは入りません。


# 意味合い的な問題やね(^^;


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity