0

と書くことで、2 次元配列を 0 で初期化できることを知っています。

a[value_1][value_2] = {0};

そして、私たちが書くなら

a[value_1][value_2] = {number other than 0};

最初の要素は { } で指定された番号で初期化され、残りはすべて 0 になります。

しかし、私を悩ませているのは、可変サイズのオブジェクトが初期化されていない可能性があるというエラーが表示されるため、パラメーター value_1 と value_2 がユーザーから入力された配列をどのように初期化できるかということです。

また、(2次元配列だけでなく)多次元配列についても教えていただけると助かります。

4

2 に答える 2

0

C99 でこれを行うには (でコンパイルgcc -std=c99):

#include <stdio.h>
#include <string.h>

int main ()
{
  int value_1, value_2;
  scanf("%d %d", &value_1, &value_2);

  int a[value_1][value_2];

  // initialize
  for (int i=0; i<value_1; i++)
    for (int j=0; j<value_1; j++)
      a[i][j] = 0;
  // or
  memset(a, 0, value_1*value_2*sizeof(int));

  return 0;
}

@JensGustedtが指摘したように、C++では可変長配列はサポートされていません。一方、g++はそれをサポートしているため、上記の同じコードがそこでも機能します。

私の知る限り、可変サイズのオブジェクトの初期化子は、C でも C++ でもサポートされていません。

于 2013-08-28T11:05:50.963 に答える
-1

ユーザーが入力した値を使用して配列を初期化することはできません。C はこれを許可しません。

デニス・リッチーを参照してください。

同じことを達成する 1 つの方法は、malloc()関数を使用して実行できます。

#include<stdio.h>
#include<malloc.h>

int main(void)
{
    int limit;
    printf("Enter the array limit:- ");
    scanf("%d",&limit);
    int *arr = (int*)malloc(sizeof(int) * limit);

    // The above statement allocates the memory equivalent to 3 integers

    // Now considering your limit is 3 and initializing values

    arr[0] = 43;
    arr[1] = 65;
    scanf("%d",&arr[2]);    // All of these work perfectly fine.

    return 0;
}

これが役立つことを願っています。多次元配列も同様に作成できます。標準 C で制限を定義する明示的な方法はありません。int arr[limit];

于 2013-08-28T12:38:32.897 に答える