Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

Dominando ponteiros e matrizes multidimensionais em C


Na linguagem C, um array é uma coleção de valores de tipo semelhante armazenados em locais de memória contínua. Cada elemento em uma matriz (unidimensional ou multidimensional) é identificado por um ou mais índices inteiros exclusivos.

Um ponteiro, por outro lado, armazena o endereço de uma variável. O endereço do 0º elemento em um array é o ponteiro do array. Você pode usar o "operador de desreferência" para acessar o valor ao qual um ponteiro se refere.

Você pode declarar um array unidimensional, bidimensional ou multidimensional em C. O termo "dimensão" refere-se ao número de índices necessários para identificar um elemento em uma coleção.

Ponteiros e matrizes unidimensionais


Em uma matriz unidimensional, cada elemento é identificado por um único número inteiro:
02 
Aqui, o número “1” está no índice 0, “2” no índice 1 e assim por diante.

Uma variável que armazena o endereço do 0º elemento é seu ponteiro -
11 
Simplesmente, o nome do array também aponta para o endereço do 0º elemento. Então, você também pode usar esta expressão -
29 

Exemplo


Como o valor do ponteiro aumenta de acordo com o tamanho do tipo de dados, "x++" move o ponteiro para o próximo elemento na matriz.
33 

Saída


Quando você executa este código, ele produzirá a seguinte saída -
41 

Ponteiros e matrizes bidimensionais


Se um array unidimensional é como uma lista de elementos, um array bidimensional é como uma tabela ou matriz.

Os elementos em uma matriz 2D podem ser considerados organizados logicamente em linhas e colunas. Conseqüentemente, a localização de qualquer elemento é decidida por dois índices, seu número de linha e número de coluna. Os índices de linha e coluna começam em "0".
50 
Tal matriz é representada como -
Col0 Col1 Col2 Linha0arr[0][0]arr[0][1]arr[0][2]Row1arr[1][0]arr[1][1]arr[1][2]Row2arr[2][0]arr[2][1]arr[2][2]
Pode-se notar que o arranjo tabular é apenas uma representação lógica. O compilador aloca um bloco de bytes contínuos. Em C, a alocação do array é feita em linha principal, o que significa que os elementos são lidos no array em linha.

Aqui, declaramos um array 2D com três linhas e quatro colunas (o número no primeiro colchete sempre se refere ao número de linhas) como -
62 
O compilador alocará a memória para o array 2D acima em ordem de linha. Supondo que o primeiro elemento do array esteja no endereço 1000 e o tamanho do tipo "int" seja 4 bytes, os elementos do array obterão os seguintes locais de memória alocados -
Linha 0 Linha 1 Linha 2 Valor123456789101112Endereço100010041008101210161020102410281032103610401044
Atribuiremos o endereço do primeiro elemento do array num ao ponteiro ptr usando o endereço do operador &.
74 

Exemplo 1


Se o ponteiro for incrementado em 1, ele passa para o próximo endereço. Todos os 12 elementos do array “34” podem ser acessados em um loop da seguinte forma -
81 

Saída


Quando você executa este código, ele produzirá a seguinte saída -
91 
Em geral, o endereço de qualquer elemento da matriz usa a seguinte fórmula -
108 
Em nossa matriz 34,
116 
Você pode consultar a figura acima e ela confirma que o endereço de "arr[3][4]" é 1044.

Exemplo 2


Use o ponteiro de desreferência para buscar o valor no endereço. Vamos usar esta fórmula para percorrer o array com a ajuda de seu ponteiro -
121 

Saída


Quando você executa este código, ele produzirá a seguinte saída -
135 

Ponteiros e matrizes tridimensionais


Uma matriz tridimensional é uma matriz de matrizes bidimensionais. Tal array é declarado com três subscritos -
148 
Este array pode ser considerado como um número “x” de camadas de tabelas, cada tabela possuindo um número “x” de linhas e um número “y” de colunas.

Um exemplo de matriz 3D é -
150 
Um ponteiro para o array 3D pode ser declarado como -
167 
Sabendo que o próprio nome do array é o endereço do 0º elemento, podemos escrever o ponteiro de um array 3D como -
170 
Cada camada de linhas "x" e colunas "y" ocupa -
188 
Número de bytes. Supondo que a memória alocada para o array 3D "arr" conforme declarado acima comece no endereço 1000, a segunda camada (com "i =1") começa na posição 1000 + (3 3) 4 =1036 bytes.
198 
Se JMAX for o número de linhas e KMAX for o número de colunas, então o endereço do elemento na 0ª linha e na 0ª coluna da 1ª fatia é -
203 
A fórmula para obter o valor de um elemento na j-ésima linha e na k-ésima coluna da i-ésima fatia pode ser dada como -
211 

Exemplo:Imprimindo um array 3D usando desreferenciação de ponteiro


Vamos usar esta fórmula para imprimir o array 3D com a ajuda da desreferenciação do ponteiro -
221 

Saída


Quando você executa este código, ele produzirá a seguinte saída -
239 
Em geral, acessar um array com um ponteiro é bastante semelhante a acessar um array com representação subscrita. A principal diferença entre os dois é que a declaração subscrita de um array aloca a memória estaticamente, enquanto podemos usar ponteiros para alocação dinâmica de memória.

Para passar um array multidimensional para uma função, você precisa usar ponteiros em vez de subscritos. No entanto, usar uma matriz subscrita é mais conveniente do que usar ponteiros, o que pode ser difícil para novos alunos.

Linguagem C

  1. Chamada C++ por referência:usando ponteiros [com exemplos]
  2. Como passar e retornar objeto de funções C++?
  3. Compreendendo a precedência e associatividade do operador C:um guia claro
  4. Tutorial de matriz C#:criar, declarar, inicializar
  5. Classe e objeto C++ com exemplo
  6. Variáveis ​​C, Constantes e Literais
  7. Lista de inicialização do construtor C++:por que e como usá-la
  8. Operadores de incremento e decremento Master C:uso e práticas recomendadas
  9. Data e hora do C++
  10. C# - Diretivas de pré-processador