Passando matrizes multidimensionais em c ++

Video: 24 - Lógica de Programação - Matrizes - Declaração e preenchimento de arrays bidimensionais

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.


Publicações relacionadas