/ / доступ до динамічної матриці в c - c, матриці, динамічні, malloc

доступ до динамічної матриці в c - c, матриці, динамічний, malloc

Я створюю динамічну цільову матрицю (2X2) в c з malloc

int *ptr=malloc(sizeof(int)*4);

Мені вдається отримати доступ до матриці за допомогою одного індексу [(i * 2) + j], а не з двома індексами, як [i] [j]. Чи є динамічна матриця доступною лише з одним індексом, чи я помиляюсь десь? Дякую

Відповіді:

0 для відповіді № 1

Вам слід оголосити вашу матрицю як покажчик на ціле число. Ось приклад:

#include <stdio.h>
#include <stdlib.h>

#define NEW_ARRAY(ptr, n) 
{ 
(ptr) = malloc((n) * sizeof (ptr)[0]); 
if ((ptr) == NULL) { 
fprintf(stderr, "error: Memory exhaustedn"); 
exit(EXIT_FAILURE); 
} 
}

int main(void)
{
const int m = 2, n = 2;
int **A;
int i, j;

/*allocate matrix*/
NEW_ARRAY(A, m);
for (i = 0; i < m; i++) {
NEW_ARRAY(A[i], n);
}

/*initialize matrix*/
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
A[i][j] = i + j;
}
}

/*print matrix*/
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
printf("%d ", A[i][j]);
}
putchar("n");
}

return 0;
}

0 для відповіді № 2

Динамічна матриця може мати доступ лише до одного індексу, або я помиляюся десь?

Ти можеш з двома індексами, як [i] [j] визначивши його належним чином:

    int (*ptr)[2] = malloc(sizeof(int)*4);