


Динамический двумерный массив в Си
Есть вот такая програмка, в 3 случае мне нужно заполнить массив случайными числами, но мне выдаёт ошибочку main.c:48:17: error: subscripted value is neither array nor pointer nor vector
a[i][j]=rand()%100;
Как правильно обратиться к массиву?
#include
#include
#include
int main()
{
int Selection, i,j, *a, n, m; // указатель на массив
printf("Меню операций: \n-------------------\n");
printf("1.Динамическое выделение памяти для двумерного массива\n");
printf("2.Ввод элементов массива с клавиатуры\n");
printf("3.Заполнение массива случайными числами\n");
printf("4. Отсортировать четные столбцы массива по убыванию с помощью метода \n «пузырька» \n");
printf("5.Вывод элементов массива на экран\n");
printf("6.Освобождение памяти, выделенной для массива\n");
printf("7.Окончание работы программы\n");
while (1)
{
printf("\n\nВаш выбор: ");
scanf("%d ", &Selection);
switch (Selection)
{
case 1:
// Выделение памяти
a = (int*)malloc(n*m * sizeof(int));
break;
case 2:
printf("Введите количество строк: ");
scanf("%d", &n);
printf("Введите количество столбцов: ");
scanf("%d", &m);
for (i = 0; i<n; i++) // цикл по строкам
{
for (j = 0; j<m; j++) // цикл по столбцам
{
printf("a[%d][%d] = ", i, j);
scanf("%d", (a + i*m + j));
}
}
break;
case 3:
printf("Введите количество строк: ");
scanf("%d", &n);
printf("Введите количество столбцов: ");
scanf("%d", &m);
for (i = 0; i<n; i++) // цикл по строкам
{
for (j = 0; j<m; j++) // цикл по столбцам
{
a[i][j]=rand()%100;
}
}
break;
case 4: // Выход
break;
case 5:
for (i = 0; i<n; i++) // цикл по строкам
{
for (j = 0; j<m; j++) // цикл по столбцам
{
printf("%5d ", *(a + i*m + j)); // 5 знакомест под элемент массива
}
printf("\n");
}
break;
case 6:
free(a);
break;
case 7:
exit(0);
break;
}
}
return 0;
}
*a =~= a[]
**a =~= a[][]