Инициализация переменной двумерного массива с определенным значением

Я знаю, что мы можем инициализировать 2-D массив с 0, написав

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

и если мы напишем

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

первый элемент инициализируется числом, указанным в {}, а остальные — 0.

Но меня беспокоит то, как мы можем инициализировать массив, параметры value_1 и value_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;
}

В C ++ массивы переменной длины не поддерживаются, как указывало @JensGustedt. С другой стороны, g++ поддерживает, так что тот же код выше будет работать там же.

Насколько я знаю, инициализаторы в объектах переменного размера не поддерживаются ни в C, ни в C ++.

0

Другие решения

Вы не можете инициализировать массив, используя значения, введенные пользователем. С не позволяет этого.

Ссылаться на Деннис Ритчи.

Один из способов добиться того же самого можно сделать с помощью 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];

-1

По вопросам рекламы [email protected]