[解決済み] 2次元配列全体を1つの値で初期化する
質問
次のような宣言がある場合
int array[ROW][COLUMN]={0};
配列はすべて0になりますが、次のようなものが得られます。
int array[ROW][COLUMN]={1};
すべて1つの値の配列が得られません。デフォルト値は0のままです。
なぜこのような動作になるのでしょうか、また、どうすればオール1で初期化できるのでしょうか。
EDIT: 今、理解したのですが
memset
を使用すると、各バイトが 1 に設定されるため、配列の各セルの実際の値は 1 になりませんが
16843009
. どうすれば1になるのでしょうか?
どのように解決するのですか?
このような動作になるのは
int array [ROW][COLUMN] = {1};
が
ではない
というのは、「すべての項目を1つにする」という意味です。これがどのように機能するのか、順を追って説明しましょう。
配列を初期化する明示的でわかりやすい方法は、次のようになります。
#define ROW 2
#define COLUMN 2
int array [ROW][COLUMN] =
{
{0, 0},
{0, 0}
};
しかし、C言語では配列(または構造体/結合体)の中のいくつかの項目を省くことができます。例えば、次のように書くことができます。
int array [ROW][COLUMN] =
{
{1, 2}
};
これは、最初の要素を1と2に初期化し、残りの要素を"あたかもそれらが静的な記憶期間を持つかのように"初期化することを意味します。C言語には、プログラマによって明示的に初期化されない静的記憶期間のすべてのオブジェクトは、ゼロに設定されなければならないというルールがあります。
したがって、上記の例では、最初の行は 1,2 に、次の行は 0,0 に設定されます。
次に、C言語には緩やかなブレーススタイルを許可するルールがあります。最初の例は次のように書くことができます。
int array [ROW][COLUMN] = {0, 0, 0, 0};
のように書くと、もちろんスタイルが悪いし、読みにくいし、理解しにくいのですが、このルールは便利です。しかし、このルールは便利です。
int array [ROW][COLUMN] = {0};
つまり、最初の行の最初の列を0に初期化し、他のすべての項目は静的な保存期間を持つかのように、つまり0に設定する、ということです。
したがって、もしあなたが
int array [ROW][COLUMN] = {1};
というのは、"最初の行の一番最初の列を1に初期化し、他のすべての項目を0に設定する"という意味です。
関連
-
警告:符号付き整数式と符号なし整数式の比較 [-Wsign-compare]
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] ArrayListの初期化を1行で行う。
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] 配列を値でコピーする
-
[解決済み] longをフォーマットするprintfの引数は何ですか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
C 構造体定義エラー: '['トークンの前に一次式があることが予想される
-
解決済み] g++ コンパイルエラー: ')'トークンの前に一次式があることが予想される
-
[C] Error [Error] 代入の左オペランドとして lvalue が必要です。
-
C++の配列コピー
-
[解決済み] Code::Blocks アプリケーションをコンパイルできない
-
[解決済み] Xcode - 警告。C99 では関数の暗黙の宣言は無効です。
-
[解決済み] Linuxカーネルにおけるcontainer_ofマクロの理解
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] LD_PRELOADのトリックとは何ですか?