Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で繰り返し値の配列を簡単に初期化する範囲指定の省略表記

配列とは、同じデータ型の複数の値をまとめて格納するためのデータ構造です。実際の開発では、「3、3、3、3、3」のように、まったく同じ値を連続して格納したい場面によく遭遇します。

このようなケースに備えて、C言語(GCC/Clangなどのコンパイラ拡張)では、範囲を指定して繰り返し値をまとめて初期化できる便利な省略表記が用意されています。これを活用すれば、一つひとつ値を書く必要がなくなり、プログラマーの負担を大幅に軽減できます。

基本構文

[開始インデックス ... 終了インデックス] = 値

例:「3」を5回繰り返して格納する場合
[0 ... 4] = 3

この記法では、指定した範囲内のすべての要素に同じ値が代入されます。「0 ... 4」と書けば、インデックス0から4までの計5個の要素がすべて「3」で初期化されます。

サンプルコード

#include <stdio.h>
int main() {
    int array[10] = {[0 ... 4] = 3, [6 ... 9] = 5};
    for (int i = 0; i < 10; i++)
        printf("%d ", array[i]);
    return 0;
}

実行結果

3 3 3 3 3 0 5 5 5 5

コードの解説

上の例では、長さ10の配列が次のように初期化されています。

  • インデックス0〜4:すべて「3」で初期化
  • インデックス5:範囲指定がないため、自動的に「0」で初期化
  • インデックス6〜9:すべて「5」で初期化

範囲指定で明示的に初期化されなかった要素は、指定付き初期化子の一般的なルールと同様にゼロで埋められます。そのため、実行結果ではインデックス5だけが「0」になっているのです。

利用時の注意点

「[開始 ... 終了] 値」という範囲指定の初期化は、標準Cの仕様ではなく、GCCやClangなどが提供する拡張機能であることに注意してください。Visual StudioのMSVCなど、対応していないコンパイラではコンパイルエラーとなるため、移植性を重視するプロジェクトでは事前にコンパイラの対応状況を確認しておきましょう。

  1. C言語で配列の全要素の積を求めるプログラム

    n個の要素を含む配列 arr[n] が与えられたとき、その配列内のすべての要素の積を求めることが課題となります。例えば、7つの要素からなる配列 arr[7] の場合、積は以下のように計算されます。例入力: arr[] = { 10, 20, 3, 4, 8 } 出力: 19200 説明: 10 × 20 × 3 × 4 × 8 = 19200 入力: arr[] = { 1, 2, 3, 4, 3, 2, 1 } 出力: 144解き方のアプローチ配列を入力として受け取る。配列のサイズを求める。配列を反復処理しながら、各要素を掛け合わせる。結果を表示する。アルゴリズム開始 関数 int pro

  2. C言語で配列を左にn回転させるプログラムの書き方

    C言語で配列を左方向にn回転させるプログラムの書き方を解説します。配列の要素を指定した回数だけ左へシフトし、はみ出した先頭の要素を末尾に移動させる「左回転(左ローテート)」の基本的なロジックを、サンプルコードと実行例付きでわかりやすく紹介します。入力と出力の例入力: arr[] = 1 2 3 4 5 6 7 8 9 10N = 3出力: 4 5 6 7 8 9 10 1 2 3アルゴリズムの流れまず、配列 arr に要素を格納します。回転させる回数を変数 N に設定します。「1回分の左回転」をN回繰り返します。1回分の左回転とは、配列の全要素を1つずつ左にずらし、先頭にあった要素を末尾へコピ