#include <stdio.h>
#include <stdlib.h>
int main(){
int** matriz;
int linhas = 5;
int colunas = 10;
matriz = malloc(sizeof(int*) * linhas);
for (int i = 0; i < linhas; i++){
matriz[i] = malloc(sizeof(int) * (colunas + 1));
}
int aux = 0;
for(int i = 0; i < linhas; i++){
for(int j = 0; j < colunas; j++){
matriz[i][j] = aux;
printf("%d ", matriz[i][j]);
aux++;
}
printf("\n");
}
for (int i = 0; i < linhas; i++){
free(matriz[i]);
}
free(matriz);
}
Fiquei com uma dúvida neste seguinte trecho do código:
matriz = malloc(sizeof(int*) * linhas); //Dúvida
for (int i = 0; i < linhas; i++){
matriz[i] = malloc(sizeof(int) * (colunas + 1)); //Dúvida
}
- Por que é necessário colocar o asterisco em int* na linha do ponteiro "matriz", mas não é necessário quando vai preencher os ponteiros com outros ponteiros?
- As "linhas" e "colunas" são ponteiros ou arrays? Se forem ponteiros, nessa memória alocada eles estão dispostos assim como os elementos do array ficam "um do lado do outro (endereços vizinhos)" na memória?