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

【C言語】可変長配列(VLA)の初期化方法を実例付きで解説

可変長配列(VLA)とは

可変長配列(Variable Length Array:VLA)とは、その長さがコンパイル時ではなく実行時に決定される配列のことです。従来のC言語では、配列のサイズはコンパイル時に定数で指定する必要がありましたが、VLAを使えば、ユーザーの入力や計算結果など、実行時に初めて判明する値をそのまま配列のサイズとして指定できます。

この機能は、数値計算アルゴリズムのプログラミングを大幅に簡素化できるため非常に便利です。可変長配列は、C99と呼ばれるC言語の標準規格で正式にサポートされました。

サンプルプログラム

以下は、C言語で可変長配列を使用する例を示したプログラムです。

#include <stdio.h>

int main(void) {
    int n;

    printf("配列のサイズを入力してください: \n");
    scanf("%d", &n);

    int arr[n];

    for (int i = 0; i < n; i++)
        arr[i] = i + 1;

    printf("配列の要素: ");

    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);

    return 0;
}

実行結果

上記プログラムの実行結果は以下の通りです。

配列のサイズを入力してください: 10
配列の要素: 1 2 3 4 5 6 7 8 9 10

プログラムの解説

それでは、このプログラムがどのように動作しているのか、順を追って見ていきましょう。

1. 実行時にサイズを決定する

このプログラムにおける配列 arr[] は可変長配列であり、その長さはユーザーが入力した値によって実行時に決まります。該当するコード部分は以下の通りです。

int n;

printf("配列のサイズを入力してください: \n");
scanf("%d", &n);

int arr[n];

まず scanf() でユーザーからサイズを受け取り、その値 n を用いて int arr[n]; と宣言することで、必要な大きさの配列がスタック上に確保されます。

2. 配列の初期化と表示

続いて、forループを使って各要素を初期化し、その後すべての要素を画面に表示しています。該当するコード部分は以下の通りです。

for (int i = 0; i < n; i++)
    arr[i] = i + 1;

printf("配列の要素: ");

for (int i = 0; i < n; i++)
    printf("%d ", arr[i]);

最初のループでは arr[0] から arr[n-1] まで、それぞれ「インデックス + 1」の値を代入しています。2つ目のループで、初期化された値を先頭から順に出力します。

可変長配列を使う際の注意点

可変長配列は便利な一方で、いくつか留意すべきポイントがあります。

  • VLAはC99では必須機能でしたが、C11ではオプション扱いに変更されました。そのため、コンパイラによっては利用できない場合があります(GCCやClangなど主要なコンパイラは対応しています)。
  • VLAはスタック領域に確保されるため、極端に大きなサイズを指定するとスタックオーバーフローを引き起こす危険があります。
  • 一度宣言したVLAのサイズを、後から変更することはできません。
  1. 【初心者向け】C/C++における多次元配列の初期化方法をわかりやすく解説

    多次元配列とは、次元数が2以上ある配列のことです。本記事では、3×3×3の多次元配列におけるメモリ割り当ての仕組みと、実際に配列を初期化して内容を表示するC++プログラムを紹介します。下図は、次元が3×3×3の多次元配列に対するメモリ割り当ての戦略を示したものです。アルゴリズム多次元配列を初期化するプログラムは、以下の手順で構成されます。Begin 多次元配列の要素を初期化する 配列のサイズを出力する 配列の内容を表示する Endサンプルコード以下は、2行2列の二次元配列を初期化し、そのサイズと内容を出力するC++プログラムです。#include<iostream

  2. C言語の多次元配列とは?行優先・列優先の仕組みとサンプルコード

    多次元配列とは配列とは、同種のデータ(ホモジニアスなデータ)をまとめて管理するための基本的なデータ構造です。配列の要素は、メモリ上の連続した領域に順番に配置されます。しかし実際のプログラミングでは、1次元の配列だけでは不十分なケースが少なくありません。例えば、表形式のデータや行列を扱う場合には、2次元配列やさらに多くの次元を持つ多次元配列を作成する必要があります。行優先方式と列優先方式多次元配列をメモリ上に表現する方法には、大きく分けて2つのアプローチがあります。ひとつは行優先(Row-Major)方式、もうひとつは列優先(Column-Major)方式です。r行 c列の2次元配列を考えてみま