Como construir uma matriz de ponteiros em C Programming

Uma matriz de ponteiros seria uma matriz que detém posições de memória. Uma tal construção é frequentemente 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 * frutas [] = { "melancia", "banana", "pêra", "maçã", "coco", "uva", "blueberry"} - int x-for (x = 0-xlt; 7-x ++) puts (frutas [x]) - retorno (0) -}

Uma matriz de ponteiros é declarado em loucos ponteiro Arrays. Ele funciona de forma semelhante a uma matriz de strings, embora nessa 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 do ponteiro que você acha que poderia ser melhorado?

exercício 2: Usando informações abaixo como seu guia, substituir a notação de matriz na Linha 17 em loucos ponteiro Arrays com a notação 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 (supondo 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.

Apontadores para PONTEIROS EXEMPLO

#include int main () {char * frutas [] = { "melancia", "banana", "pêra", "maçã", "coco", "uva", "blueberry"} - int x-for (x = 0-XLT; 7-X ++) {putchar (** (fruta + x)) - putchar ( ' n') -} retorno (0) -}

Linha 18 em Apontadores para ponteiros Exemplo contém os temida, temido, evitado, e maldito ** notação, ou duplo ponteiro notação.

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

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

frutas + 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 por todos os elementos do fruta array 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 exterior (o primeiro asterisco) é o conteúdo desse endereço de memória.

image0.jpg

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, para uma matriz de cadeias. A primeira coluna é o endereço de uma matriz de ponteiros, a segunda coluna é o próprio (a string) ponteiro, ea coluna da direita é o primeiro caractere da string.

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

ponteiro Notationnotação de matrizDescrição
** ptr* Array []Declara uma matriz de ponteiros.
* ptrarray [0]O endereço do primeiro ponteiro na array- para uma stringarray, a primeira corda.
* (Ptr + 0)array [0]O mesmo que a entrada anterior.
** ptrmatriz [0] [0]O primeiro elemento do primeiro ponteiro na array- o firstcharacter da primeira corda na matriz.
** (Ptr + 1)matriz [1] [0]O primeiro elemento do segundo ponteiro na array- o firstcharacter da segunda corda.
* (* (Ptr + 1))matriz [1] [0]O mesmo que a entrada anterior.
* (* (PTR + a) + b)matriz [a] [b]B Elemento de ponteiro uma.
** (PTR + a) + bmatriz [a] [0] + bEste item não é realmente o que você quer. O que isto itemrepresents é o valor de 0 elemento de ponteiro uma além thevalue da variável b. Use * (* (ptr + a) + b) notationinstead.

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 individualmente em uma string é exibida, um de cada vez, usando a função putchar (). Se você pode escrever a operação inteira putchar () como uma condição do loop while, você realmente entender o material.

menu