質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

424閲覧

グローバル変数、自動変数について

kelt22

総合スコア46

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/02/24 14:00

質問内容

int型の配列をグローバル変数と自動変数にわけて同じように宣言すると配列の中身が異なりました。自動変数で宣言した方は下記のようになることがわかるのですが、グローバル変数の方はなぜこのようになるのかわかりません。解説よろしくお願いします。

該当のソースコード

c

1#include<stdio.h> 2int b[5]; 3int main(void){ 4 int a[5]; 5 int i; 6 printf("a:"); 7 for(i=0;i<5;i++){ 8 printf("%d ",a[i]); 9 } 10 putchar('\n'); 11 printf("b:"); 12 for(i=0;i<5;i++){ 13 printf("%d ",b[i]); 14 } 15 return 0; 16} 17実行結果 18a:6422352 4200859 4200752 0 2748416 19b:0 0 0 0 0 20

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

グローバル変数やstaticのint型は、初期化子が無い場合0になります。

JIS規格書より:

自動記憶域期間をもつオブジェクトを明示的に初期化しない場合,その値は不定とする。静的記憶域期間をもつオブジェクトを明示的に初期化しない場合,次の規定に従う。

a)そのオブジェクトの型がポインタ型の場合,空ポインタに初期化する。
b)そのオブジェクトの型が算術型の場合,(正又は符号無しの)0 に初期化する。
c)そのオブジェクトが集成体の場合,各メンバに a)〜d)の規定を(再帰的に)適用し初期化する。
d)そのオブジェクトが共用体の場合,最初の名前付きメンバに a)〜d)の規定を(再帰的に)適用し初期化する。

投稿2020/02/24 14:18

otn

総合スコア84507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

グローバル変数は自動変数と違って、明示的に初期化されていないとき、0初期化されることが規格で決まっているからです。

投稿2020/02/24 14:17

yuki23

総合スコア1448

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問