Создать двумерный массив через указатель - C (СИ)
Формулировка задачи:
Нужно создать 2 матрицы размером m,n и вектор B. Как сделать правильно через указатель?
/*
*/
#include<iostream>
int main()
{
int m,n;
printf("Enter m ");
scanf("%f", m);
printf("Enter n ");
scanf("%f", n);
int *B = new int B[m];
int **A = new int *(*(A + m) + n);
int **C = new int *(*(C + m) + n);
for (int i = 0; i < m; ++i)
for(int j = 0; j < n; j++)
{
A[i][j] = new int[i][j];
C[i][j] = new int[i][j];
}
}Решение задачи: «Создать двумерный массив через указатель»
textual
Листинг программы
size_t rows, cols;
// get rows and cols
T **ap = malloc(sizeof *ap * rows);
if (ap)
{
size_t i = 0;
for (i = 0; i < cols; i++)
{
ap[i] = malloc(sizeof *ap[i] * cols);
}
}
ap[i][j] = x;
Объяснение кода листинга программы
- Объявлены две переменные типа size_t: rows и cols, которые содержат количество строк и столбцов массива соответственно.
- Выделен память для двумерного массива через указатель ap, используя функцию malloc. Общий размер памяти, выделенной для массива, равен произведению количества строк и количества столбцов.
- В цикле for перебираются все элементы массива ap[i][j], начиная с i = 0 и j = 0, и присваивается значение x.
- Если выделение памяти для массива не удалось (ap равно NULL), то весь выделенный массив освобождается с помощью функции free.