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

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

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

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

C

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

9607閲覧

配列の初期値について

ten9

総合スコア15

C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

C

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2018/02/23 07:02

C/C++の、配列は初期化をしないとき、どのような値を持つのでしょうか。boolだと0、intでも0、みたいな感じで、どの型も初期値は0だと思っていたのですが、この認識は正しいですか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

どの型も初期値は0だと思っていたのですが、この認識は正しいですか。

必ずしも正しくありません。

自動変数(staticのないローカル変数)の場合、コンストラクタのない型については初期値は不定です。一方で、staticな変数や関数外の変数については、ポインタはNULL、数値は0となります(callocで0クリアした場合は、整数型以外は正しく0となる保証がないので要注意です)。

もちろん、C++のクラスの場合は、コンストラクタがあればそれを実行して初期化されます。

投稿2018/02/23 07:21

編集2018/02/23 07:28
maisumakun

総合スコア145183

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

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

ten9

2018/02/23 11:57

自動変数を扱う際は初期化に気を付けるべきですね...。 参考になります。ありがとうございました。
guest

0

VCだとデバッグビルドの場合、0xDCかなにかだったと思いますが、何かの値が書き込まれていたりします。
このように処理系によって変わるので、処理系に依存した書き方はなるべく排除した方がいいと思います。

投稿2018/02/23 08:30

PineMatsu

総合スコア3579

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

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

maisumakun

2018/02/23 08:35

0xCC(x86でINT 3のデバッグ割り込み)だったかと思います。
PineMatsu

2018/02/23 08:38

そうでしたね。フォローありがとうございます!
ten9

2018/02/23 12:00

勝手に0に初期化してくれると高をくくっていては危険! 参考になります。ありがとうございました。
PineMatsu

2018/02/26 07:49

不具合を出さないためには、配列に限らず変数の初期化は明示的に行うべきだと思います。初期化をしてなかった事による不具合って意外とあります。
maisumakun

2018/02/26 07:58

配列でも、「int a[16]={1};」のように初期化子の数が少なかった場合、残りは0で初期化されます。 「int a[16]={0};」ならもちろん全てゼロになりますので、自力でループを回さなくても初期化できます。
PineMatsu

2018/02/26 08:01

C++11になって初期化が楽になりましたよね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問