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