Ir ao conteúdo

Requisição de apostila sobre ponteiros em C


linguagem_c

Posts recomendados

Postado

Salve, viciado123.

Segue abaixo o que tenho sobre ponteiro... Isso é do meu 2° semestre de Ciência da Computação - FAC.

ALULA

Aula 4 - Ponteiros

Ponteiros são variáveis que armazenam um endereço de memória, isto é, ponteiros ‘apontam’ para o endereço de uma outra variável. “Basicamente, um ponteiro é uma representação simbólica de um endereço. [schildt , página 113] [PLT, pág. 2, parte II].

Declaração de variáveis do tipo Ponteiro [PLT, pág. 6, parte II]

tipo *nome_ponteiro;

Onde * é o sinal utilizado na definição para dizer ao compilador que esta variável é um ponteiro. O tipo do ponteiro deve ser o mesmo que o da variável que este ponteiro irá apontar. Por exemplo, uma variável “x” é do tipo inteiro, sendo assim, o ponteiro “px” que ‘aponta para esta variável é também do tipo inteiro”:

Obs: usualmente o nome da variável ponteiro começa com a letra “p”, porém é possível dar qualquer nome a uma variável do tipo ponteiro.


{
int x;
int *px;
}
main()

Expressões com ponteiro

Atribuição

Os ponteiros recebem o endereço de memória, as variáveis que o ponteiro receber devem ser precedidas do símbolo &. OBS: O operador & faz com que o endereço de memória de uma variável seja retornado. Exemplos:

px = &x;

p = &q;

Valor armazenado na variável

Para que os ponteiros possam passar o valor armazenado na variável para a qual apontam devem ser precedidos de *. OBS: O operador * é utilizado na declaração de variáveis do tipo ponteiro e também para obter o valor da variável para qual aponta. Ex.:

y=*px; // seguindo tabela do início y passa a receber o valor 3

Operações Aritméticas com ponteiros utilizando os valores da variável

Para que os cálculos aritméticos das variáveis possam ser realizados por ponteiros é necessário que a variável ‘ponteiro’ esteja acompanhada de *. Exemplos:


Operações Variável Ponteiro
Igualdade x = y; *px = y;
Incremento x++; (*px)++;
Decremento x--; (*px)--;
Soma x = x + 5; *px = *px + 5;
Subtração x = x - 5; *px = *px - 5;
Multiplicação x = x * 3; *px = (*px) * 3;
Divisão x = x / 2; *px = (*px) / 2;
Relacionais x < 2 *px < 2


Operações Aritméticas (memória)

Os ponteiros aceitam somente estes dois tipos de operações aritméticas na memória. Os ponteiros incrementam ou decrementam de acordo com o seu tipo de dados, isto quer dizer que quando o comando p++ é executado o ponteiro avança em um endereço de memória (recebe o endereço de memória da próxima variável do mesmo tipo armazenada). Ex.: [schildt , página 116].

Leitura e Escrita

Printf e Ponteiros

Para apresentar o valor contido em um ponteiro deve-se utilizar “%p”, este comando apresenta o endereço de memória para onde este ponteiro ‘aponta’. Ex.:

printf(“\nValor da memória: %p”, px);

Para apresentar o valor da variável para a qual o ponteiro ‘aponta’, deve-se a string referente ao tipo de dados contido na variável. Ex.:

Printf(“\nValor da variável inteira: %d”, *px);

Scanf e Ponteiros

O scanf é uma função e precisa do endereço da memória das variáveis para poder alterar o seu conteúdo, assim quando é necessário ler uma variável inteira, é necessária a utilização do operador &. O scanf possibilita que o valor de uma variável seja lida através de um ponteiro, para isso deve-se proceder da mesma forma (tipo da variável, nome da variável), no entanto o & deve ser omitido pois o ponteiro já passará o endereço de memória onde se deve armazenar o valor digitado. Veja o exemplo abaixo, podemos dizer que as duas linhas fazem exatamente a mesma coisa.


[B][/B]scanf(“%d”, px);
scanf(“%d”, &x);

ERRO: Inicialize sempre um ponteiro. Não inicializar um ponteiro pode gerar graves conseqüências, pois é impossível determinar para onde este ponteiro está indicando.

Ponteiros e Vetores

Os vetores são tratados em C como ponteiros, isso é possível porque quando se declara um vetor todos os seus elementos são gravados seqüencialmente na memória, sendo que o primeiro elemento define qual a primeira posição na memória, assim as posições seguintes de memória certamente são os demais elementos do vetor. Há duas maneiras de inicializar um ponteiro para vetores, veja abaixo.

Atribuição de matrizes/vetores para um ponteiro [schildt , página 94]


{
int vetor[10];
int *pv, i;

pv = vetor; //ou pv = &vetor[0]

for (i=0;i<=10;i++)
{
printf(“\nDigite um número: ”);
scanf(“%d”, &vetor[i]);
}

printf(“\nNumero na posição 2: %d”, pv[2]);
printf(“\nNumero na posição 2: %d\n”, *(pv+2));

return(0);

}
main()

Razões para usar ponteiros (PLT, pág. 3, parte II)

1. Os ponteiros permitem que os argumentos (parâmetros) de uma função sejam alterados;

2. Possibilita a passagem de matrizes e vetores, inclusive strings, como parâmetros de uma função.

3. Melhoram a performance do software, pois os ponteiros compilam mais rapidamente.

Referêmcias Bibliográficas

[PLT, MIZRAHI] MIZRAHI, Victorine Viviane, Programação Estruturada: Treinamento em Linguagem C: Módulo 1 e 2, Anhanguera Educacional PLT e Pearson Education, 2007.

[schildt] Schildt, Herbert ; C Completo e Total, Ed. Makron Books.

EXERCÍCIOS

Ponteiros – Exercícios

1. Qual o valor da variável a ao final do programa?


{
int a, b, *p;
a = 4;
b = 2;
p = &a;
a++;
*p = a + b;
(*p)++;
(*p) += a;
printf ("\n a = %d \n", a);
return(0);
}
main() 

2. Construa um programa em C que efetue as quatro operações matemáticas (+,-,/,*) de dois números lidos (variáveis x e y). Deverão ser criados dois ponteiros, um que aponte para a variável x e outro que aponte para a variável y. As operações aritméticas devem ser realizadas utilizando-se os ponteiros. Ao final do programa imprima os valores das variáveis x e y.

3. Elabore um programa em C que leia um valor e armazene em a. Em seguida leia um outro valor e armazene em b. Crie um ponteiro que aponte para a variável b, este ponteiro deve receber a soma de todos os valores inteiros existentes no intervalo entre a e b.

4. Faça um programa em C que leia a idade de um grupo de 50 pessoas. A idade deve ser armazenada em um ponteiro. Ao final do programa apresente a maior idade do grupo de pessoas. Mostre o valor da memória onde a maior idade está armazenada.

Espero que ajudo.. Fui.

  • 4 semanas depois...
  • Membro VIP
Postado

Em C ou C++?Se você n conhecer nada a respeito de ponteiros, posso te passar uns pdf's interessantes a respeito. Se ja conhecer sobre o assunto, poste sua duvida q eu ou mais alguem ai pode te dar uma ajuda a respeito. abração

  • 2 meses depois...
Postado

Bom, aproveitar esse tópico...

Estou fazendo Ciências da Computação...

Gostaria de ajuda com Ponteiros, e Estruta No...

Entender melhor o que é estrutura no e suas aplicações!

Também me perdi sobre a biblioteca <Conio> quais as funções principais dessa biblioteca?

valeu...

Postado
Bom, aproveitar esse tópico...

Estou fazendo Ciências da Computação...

Gostaria de ajuda com Ponteiros, e Estruta No...

Entender melhor o que é estrutura no e suas aplicações!

Também me perdi sobre a biblioteca <Conio> quais as funções principais dessa biblioteca?

valeu...

aproveitando o post.. presto vestibular esse ano e estou com muita duvida em ralação a escolher eng ou ciencia da computação.. pysafe sera q c podia da uma luz ae? queria saber um pouco mais sobre seu curso..

abraço

Postado
Bom, aproveitar esse tópico...

Estou fazendo Ciências da Computação...

Gostaria de ajuda com Ponteiros, e Estruta No...

Entender melhor o que é estrutura no e suas aplicações!

Também me perdi sobre a biblioteca <Conio> quais as funções principais dessa biblioteca?

valeu...

Recomendo um livro excelente: Introdução a Estruturas de Dados. É um livro super simples e fácil de entender e aborda tudo sobre ponteiros, estruturas de dados entre várias outras coisas em C.

aproveitando o post.. presto vestibular esse ano e estou com muita duvida em ralação a escolher eng ou ciencia da computação.. pysafe sera q c podia da uma luz ae? queria saber um pouco mais sobre seu curso..

abraço

Há vários tópicos sobre o assunto:

http://forum.clubedohardware.com.br/engenharia-ciencia-computacao/643342

http://forum.clubedohardware.com.br/engenharia-computacao-x/537967

http://forum.clubedohardware.com.br/engenharia-computacao-ciencia/462850

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!