Como construir uma matriz de ponteiros em c programação

Uma matriz de ponteiros seria uma matriz que detém posições de memória. Tal construção é muitas vezes necessário na linguagem de programação C. Lembre-se que uma matriz de ponteiros é realmente uma matriz de strings, mostrado na loucos ponteiro Arrays. Isso faz com que tema a digestão mais fácil.

ARRAYS LOUCO PONTEIRO

#include int main () {char * fruta [] = {"Melancia","banana","pera","maçã","coco","uva","mirtilo"} -int x-para (x = 0-xlt; 7-x ++) coloca (fruta [x]) - retorno (0) -}

Uma matriz de ponteiros é declarado em loucos ponteiro Arrays. Ele funciona de forma semelhante a uma matriz de strings, embora neste construção você não precisa contar especificamente comprimentos de cordas individuais. Isso porque a matriz é realmente uma matriz de ponteiros, ou posições de memória. Cada corda habita em algum lugar na memória. A matriz simplesmente lista onde cada um começa.

Exercício 1: Digite o código-fonte de Crazy ponteiro Arrays em seu editor. Criar e executar para confirmar que ele funciona.

Que parte do Arrays louco ponteiro que você acha que poderia ser melhorado?

exercício 2: Usando as informações abaixo como guia, substituir a notação de matriz na Linha 17 em loucos ponteiro Arrays com notação de ponteiro.

Matriz alfa []apontador uma
alfa [0]*uma
alfa [1]* (A + 1)
alfa [2]* (A + 2)
alfa [3]* (A + 3)
alfa[n]* (A +n)

A razão que a sua solução do Exercício 2 obras (assumindo que você entendeu correta) é que a matriz fruta contém ponteiros. O valor de cada elemento é um outro ponteiro. Mas isso é nada- considerar Apontadores para ponteiros Exemplo.

PONTEIROS-TO-PONTEIROS EXEMPLO

#include int main () {char * fruta [] = {"Melancia","banana","pera","maçã","coco","uva","mirtilo"} -int x-para (x = 0-xlt; 7-x ++) {putchar (** (fruta + x)) - putchar ( `n`) -} retorno (0) -}

A linha 18 no ponteiros-a-ponteiros Exemplo contém os temida, temia, evitado, e amaldiçoou ** notação, ou duplo ponteiro notação.

Exercício 3: Cuidadosamente digite o código-fonte do Ponteiros-to-Ponteiros Exemplo em seu editor. Compilar e executar.



Para entender a ** (fruto + x) construir, você deve trabalhar de dentro para fora:

fruta + x

Variável fruta contém um endereço de memória. É um ponteiro! O X é um valor incrementado em uma unidade. Neste caso, a unidade é um endereço porque todos os elementos do fruta matriz são ponteiros.

* (Fruta + x)

Você já viu a construção anterior já. É o conteúdo do endereço de fruta + x. A partir do código, fruta é uma matriz de ponteiros. Assim, o resultado da operação anterior é. . . um ponteiro!

** (fruta + x)

Finalmente, você começa um ponteiro para um ponteiro ou - colocar melhor - um Peeker a um Peeker. Se o Peeker interior é um endereço de memória, o Peeker fora (o primeiro asterisco) é o conteúdo desse endereço de memória.

Ela ajuda a lembrar que o operador ** é quase sempre (mas não exclusivamente) ligada a uma série de pointers- ou, se você quiser torná-lo simples, a uma matriz de strings. A primeira coluna é o endereço de uma matriz de pontos, a segunda coluna é o próprio (uma cadeia) ponteiro, e a coluna da direita é o primeiro carácter da cadeia.

Se você ainda está confuso, considere remoendo notação de ponteiro e notação de matriz:

ponteiro Notationnotação de matrizDescrição
** ptr* Matriz []Declara uma matriz de ponteiros.
* ptrmatriz [0]O endereço do primeiro ponteiro na array- para uma string
matriz, a primeira corda.
* (PTR + 0)matriz [0]A mesma que a entrada anterior.
** ptrmatriz [0] [0]O primeiro elemento do primeiro ponteiro no array- o primeiro
caractere da primeira cadeia na matriz.
** (PTR + 1)matriz [1] [0]O primeiro elemento do segundo ponteiro no array- o primeiro
caráter da segunda corda.
* (* (PTR + 1))matriz [1] [0]A mesma que a entrada anterior.
* (* (PTR + a) + b)matriz [a] [b]B elemento de ponteiro uma.
** (PTR + a) + bmatriz [a] [0] + bEste isn artigo&rsquo-t realmente o que você quer. O que este item
representa se o valor de elemento de 0 a ponteiro uma mais o
valor da variável b. Utilizar a * (* (PTR + a) + b) notação
em vez de.

Na tabela, a notação ponteiro (usando variável ptr) É comparada com a notação de matriz equivalente (usando variável ordem).

Exercício 4: Retrabalhar seu código-fonte do Exercício 3 para que cada personagem individual em uma seqüência é exibida, um de cada vez, usando a função putchar (). Se você pode escrever a operação inteira putchar () como condição de um loop while, você realmente entender o material.


Publicações relacionadas