Passando matrizes multidimensionais em c ++
Video: 24 - Lógica de Programação - Matrizes - Declaração e preenchimento de arrays bidimensionais
Conteúdo
Se você tem que passar uma matriz multidimensional para uma função, as coisas podem ficar um pouco peludo. Isso é porque você não tem tanta liberdade em deixando de fora os tamanhos de matriz como você faz com matrizes de uma dimensão. Suponha que você tenha esta função:
int AddAll (int MyGrid [5] [6]) soma {int x, y-int = 0-para (x = x 0- lt; 5- x ++) {para (y = 0- y lt; 6- y ++) {soma + = MyGrid [x] [y] -}}} retorno sum-
Até agora, o cabeçalho da função é bom porque estamos declarando explicitamente o tamanho de cada dimensão. Mas você pode querer fazer isso:
int AddAll (int MyGrid [] []) {
ou talvez passar os tamanhos, bem como:
int AddAll (int MyGrid [] [], linhas, int colunas) {
Mas, infelizmente, quando você compilar qualquer uma destas duas linhas, você receber esse erro:
declaração de `MyGrid` como arraymust multidimensionais têm limites para todas as dimensões, exceto a primeira
Isso é estranho: O compilador está lhe dizendo que você deve listar explicitamente todas as dimensões, mas está tudo bem se você deixar a primeira em branco, como com matrizes unidimensionais.
Video: Matriz Multidimensional - Linguagem C
Então isso significa que essa coisa louca irá compilar:
int AddAll (int MyGrid [] [6]) {
Que tal isso? A razão é que o compilador trata arrays multidimensionais de uma maneira especial. A matriz multidimensional não é realmente uma matriz bidimensional, por exemplo- mas sim, é um array de um array.
Assim, no fundo dentro C ++, o compilador trata a declaração MyGrid [5] [6] como se fosse MyGrid [5]onde cada item na matriz é também uma matriz de tamanho 6. E você está livre para não especificar o tamanho de uma matriz unidimensional. Bem, os primeiros suportes de representar a porção unidimensional da matriz. Então você pode deixar esse espaço em branco, como você pode com outras matrizes unidimensionais.
Mas então, depois disso, você tem que dar a matriz limites. E talvez apenas um pouco artificial. Mas é C ++, e é a regra: Você pode deixar o primeiro em branco dimensão em um cabeçalho da função, mas você deve especificar os tamanhos dimensão restantes.
Ao usar arrays multidimensionais, muitas vezes é mais fácil se você pensar neles como um matriz de matrizes. Então você usa um typedef de modo que, em vez de ser uma matriz de matrizes, que é uma matriz de algum tipo definido pelo utilizador, tal como GridRow. Qualquer um dos seguintes cabeçalhos de função, por exemplo, é confuso:
int AddAll (int MyGrid [] [6]) {int AddAll (int MyGrid [] [6], contagem int) {
Aqui está nossa recomendação: Use um typedef. Então aqui está uma maneira mais limpa:
typedef int GridRow [6] -int AddAll (GridRow MyGrid [], int Tamanho) {int x, int-soma y = 0 para-(x = x 0- lt; Size- x ++) {para (y = 0- y lt; 6- y ++) {soma + = MyGrid [x] [y] -}}} retorno sum-
o typedef linha define um novo tipo chamado GridRow. Este tipo é um conjunto de seis inteiros. Em seguida, na função, você está passando uma série de GridRows.
usando este typedef é o mesmo que simplesmente usando dois suportes, exceto que ele enfatiza que você está passando uma de uma matriz - isto é, uma matriz na qual cada membro é em si uma matriz do tipo GridRow.