Alguém sabe como armazenar varias matrizes em um vetor ?
Opa e ae tudo bem?
Imagino que você esteja se referindo à várias matrizes de tipos diferentes contidas em um Vetor. Bom eu elaborei o seguinte código, talvez ajude.
#include <stdio.h>
int main()
{
//- Declaro meu vetor como sendo do tipo ponteiro void
void *vector[5];
//- Declaro e já populo minha matriz de integer
int nMatrix[2][2] = { {2, 4}, {6, 8} };
//- Declaro e já populo minha matriz de char.
char cMatrix[3][2] = { {'a','b'}, {'c','d'}, { 'e', 'f' } };
//- Declaro e inicializo meu long.
unsigned long int x = 1024859658;
//- Populo meu vetor genérico com as duas matrizes int e char.
vector[0] = (void*)nMatrix;
vector[1] = (void*)cMatrix;
vector[2] = (void*)&x;
//- Apenas confiro em tela se os endereços de memória estão armazenados em meu vector.
printf("[%p], [%p]\n", vector[0], vector[1]);
//- Carrego nValor com o valor da posição nMatrix[0][1] contida no meu vetor genérico.
int nValor = *((int*) vector[0]+1);
//- Carrego cLetras com o valor da posição cMatrix[2][0] contida no meu vetor genérico.
char cLetras = *((char*)vector[1]+4);
//- Carrego meu long int armazenado no índice 2 do meu vetor.
unsigned long int valorX = *((long int*)vector[2]);
//- Exibindo os dados em Tela
printf("%i, %c, %li \n", nValor , cLetras, valorX);
*vector = '\0';
return 0;
}
O que este código faz:
Eu crio um vetor do tipo ponteiro void para armazenar os endereços de memória das matrizes e de um long int que resolvi acrescentar. Note que são matrizes de tipos diferentes, tamanhos diferentes e no final ainda um long int para não pensarmos somente em Matrizes.
Qual é o segredo?
O segredo aqui é… Em certas situações como esta, não pense em Matrizes, nem em tipos char, int, long ou structs. Pense em endereços de memória, pense em Ponteiros. Por isso eu amo C e C++.
Pense que todos os dados que você precisa estão na memória do seu computador, tem situações específicas que você vai precisar acessar estes dados diretamente da sua memória e é ae que entra os Ponteiros.
Caso precise de um vetor de tamanho indefinido, considere o uso de malloc mas não esqueça de limpar
a memória.
Qualquer dúvida estamos ae pra ajudar.