Introdução à linguagem C - Parte III

Este artigo é o terceiro artigo da série introdução à linguagem C. Aqui serão abordados assuntos como: declaração de vetores, declaração de ponteiros, inicialização de vetores, utilização de vetores e ponteiros.

[ Hits: 48.808 ]

Por: Ricardo Rodrigues Lucca em 07/07/2003 | Blog: http://aventurasdeumdevop.blogspot.com.br/


Ponteiros



Uma das grandes características dos ponteiros é que eles não servem para guardar valor! Sim, eles não guardam valor como as variáveis comuns! Ponteiros, servem para apontar. Eles apontam para outra variável.

Este é um conceito difícil de entender, mas vamos dar um exemplo... Digamos, o seguinte, temos três pessoas: Kizuki, Nadesco e Kaoru. Kizuki está apontando para Nadesco e esta aponta para Kaoru.

Kizuki -> Nadesco -> Kaoru

Assim, se olharmos para kizuki veremos que ela esta apontando para algum lugar, se olharmos para o lugar veremos Nadesco que esta apontando para outra localização. Agora, ao olhar onde a Nadesco aponta veríamos a Kaoru, que não seria um ponteiro! Assim, o único valor correto seria o ultimo o da Kaoru! Difícil, entender? Vamos a programação!

#include <stdio.h>

void main(void)
{
        int Kaoru, *Nadesco, *Sakura, **Kizuki; //Quatro nomes de animes que adoro ^^

        scanf(" %d", &Kaoru); //Passa o endereço de memoria de Kaoru pra função scanf
        Nadesco=&Kaoru; //Nadesco recebe o endereço de memoria de Kaoru
        Kizuki = &Nadesco;
        Sakura=Nadesco; //Sakura recebe o endereço da memoria, mesmo sem ser obrigada com &
        printf("%d\n", Kaoru); //imprime o valor lido
        *Sakura = 5; //Kaoru virará 5, pois Sakura aponta Kaoru.
        printf("%d\n", Kaoru); //mostra 5
        **Kizuki = 3; //Kaoru virará 3, pois Nadesco aponta Kaoru.
        printf("%d\n", Kaoru); //imprime 3
        *Kizuki = Sakura; // Nadesco passara a apontar para Sakura que aponta Kaoru.
        **Kizuki=&Sakura;
        printf("%d\n", **Kizuki); //deve mostrar um numero estranho, se não tiver errado
}

Aqui, temos vários exemplos! Mas, infelizmente o programa ficou meio difícil de entender. Primeiro declaramos uma variável como ponteiro quando botamos um * (asterisco) na frente de seu nome. Mas, podemos criar ponteiros que apontam para outros apontadores que seria ** (asterisco asterisco) ou ainda criarmos ponteiros para ponteiros para ponteiros com três asteriscos. Mas, mais de dois já é sem utilidade.

Quando fazemos a atribuição de um ponteiro, podemos usar duas formas:

Sakura = Nadesco;
Sakura = &Nadesco;


As duas passaram o endereço de memória de Nadesco para o apontador Sakura. Mas, se tivermos um apontador de dois níveis (dois asteriscos) o uso de & se torna obrigatório!

Ao fazermos:

int *Kagome; //Tirado de mais um anime :D

Dizemos que o conteúdo, representado por asterisco, que Kagome aponta será do tipo int.

Podemos criar uma variável que poderia apontar para todos os tipos da seguinte forma:

void *Kagome;

Para acessarmos um ponteiro usamos:

*Sakura = 5;
**Kizuki = 3;


Como disse, um pouco mais pra cima, o asterisco simboliza o "conteudo"... Assim, quando digitamos a primeira linha estamos pedindo que 5 seja atribuído ao conteúdo da Sakura! Agora, o caso da Kizuki pedimos que 3 seja atribuído ao conteúdo do conteúdo da Kizuki!

Me desculpem se ficou meio confuso o texto! Mas, eu acho bastante simples!

Qualquer duvida, os comentem o texto!

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Vetores
   3. Ponteiros
   4. Aritmética de ponteiros
   5. Exemplo Final - Tudo num
Outros artigos deste autor

VIM avançado (parte 1)

Linux no Rio Grande do Sul

Aprendendo a utilizar o GNU Debugger (parte 1)

Funcionamento da memória

Linux Básico - Parte II

Leitura recomendada

Introdução à linguagem C - Parte II

O ? Alternativo em C/C++

Funcionamento da memória

Mais sobre recursividade em C/C++

Introdução à ponteiros em C

  
Comentários
[1] Comentário enviado por Henryynogui em 03/04/2004 - 09:17h

-->*/Construa a solução que preencha um vetor com código do funcionário,em outro vetor com o salário e o terceiro resultante do aumento de 15 % para os salários entre 500,00 e 1200,00. Ao final,exiba um vetor com código do funcionário e seus respectivos salários e um vetor com aumento em ordem crescente com funcionário correspondente. /*

[2] Comentário enviado por Henryynogui em 03/04/2004 - 09:18h

Dá uma forcinha por favor com esse programa em c.

-->*/Construa a solução que preencha um vetor com código do funcionário,em outro vetor com o salário e o terceiro resultante do aumento de 15 % para os salários entre 500,00 e 1200,00. Ao final,exiba um vetor com código do funcionário e seus respectivos salários e um vetor com aumento em ordem crescente com funcionário correspondente. /*

[3] Comentário enviado por Henryynogui em 03/04/2004 - 09:19h

-->*/Construa a solução que preencha um vetor com código do funcionário,em outro vetor com o salário e o terceiro resultante do aumento de 15 % para os salários entre 500,00 e 1200,00. Ao final,exiba um vetor com código do funcionário e seus respectivos salários e um vetor com aumento em ordem crescente com funcionário correspondente. /*

email: henrique_nogui@ig.com.br

[4] Comentário enviado por jllucca em 03/04/2004 - 09:59h

opa, vamos conversar por email que acho fica mais facil pra ti ajudar :)

[5] Comentário enviado por HunZ em 03/09/2004 - 18:01h

Já fiz alguns programinhas em C. Mas nunca usei ponteiros..
Os ponteiros ajudam no que?
Ou eles apenas facilitam na hora de programar?

[6] Comentário enviado por jllucca em 03/09/2004 - 19:33h

HunZ, eles tanto facilitam a programação como facilitam. Num unico ponteiro podemos ter um endereço que nesse novo endereço podera ter um outro endereço e, assim, sucessivamente...

Ponteiros são a unica forma de implementar a "Alocação dinamica" que é ir utilizado a memoria a medida que tu vai precisando dela. Por exemplo, tu cria um ponteiro lista e um aux. Ai para fazer a lista dinamica, tu reserva espaço para aux e faz ele apontar para a lista e depois a lista recebe o aux. Isso parece meio complicado, mas c voce usar uma estrutura e conseguir visualizar o que ocorre não terá duvidas do "poder" do ponteiro. Poder tanto construtivos como destrutivos, pq tu pode passar horas procurando um erro que é um ponteiro que retornou NULL e não foi checado hehehe

[]'s

[7] Comentário enviado por breulitro em 07/12/2004 - 02:54h

como se compila o programa ???

[8] Comentário enviado por jllucca em 07/12/2004 - 14:10h

gcc <nomedoarquivoc>

[9] Comentário enviado por Ti_j@der em 19/12/2004 - 21:21h

Por favor preciso de uma ajuda eu usava o Red Hat na faculdade e compilava normal agora to testando o Kurumim e naum consigo compilar os meus programas, o q pode ser ? vc sabe qula compilador ideal p o Kurumin???

[10] Comentário enviado por jllucca em 19/12/2004 - 21:50h

Oi,

eu nunca mexi com o kurumin então vou passar dois links. O primeiro é um forum da comunidade kurumin e o segundo um post de outro forum de um cara que tava com problemas pra compilar programas.

Eis, os links:

http://www.kurumin.com.br
http://www.unidev.com.br/forum/topic.asp?TOPIC_ID=13009

[]'s

[11] Comentário enviado por rockstore6 em 19/07/2007 - 23:29h

pow muito bom o artigo gostei

[12] Comentário enviado por f_Candido em 10/09/2007 - 21:47h

Muito bom o Artigo, principalmente a parte de Ponteiros.
Abraços


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts