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.
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 Notation | notação de matriz | Descrição |
---|---|---|
** ptr | * Array [] | Declara uma matriz de ponteiros. |
* ptr | array [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. |
** ptr | matriz [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) + b | matriz [a] [0] + b | Este 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.