Exercícios sobre Ponteiros

 Estes exercícios caíram em provas:


1) a) Qual o valor de y no final do programa?

   b) Escreva um /* comentário */ em cada comando de atribuição explicando o que ele faz e o valor da variável à  esquerda do '=' após sua execução.

   c) Explique o porquê de a atribuição  *q = 10  causar problemas.


#include <stdio.h>
int main()
{
int x, y, *p, *q; // 2 variáveis inteiras e 2 ponteiros
y = 19; // y recebe 19
p = &y; // p recebe o endereço de y
x = *p; // x recebe o conteúdo apontado por p (=19)
x = 7; // x recebe 7 (mas y continua com 19)
(*p)++; // incremento o conteúdo apontado por p (y++) ---> y = 20
x--; // decremento de x ---> x = 6
(*p) = (*p) + x; // o mesmo que y = y + x ---> y = 26
printf ("y = %d\n", y); // y = 26
*q = 10; // q não foi inicializada; não sabemos seu conteúdo, ou seja, para que endereço vai apontar; o problema ocorre porque tento escrever num endereço que não pertence à área do usuário.
return 0;
}


2) Comente o trecho abaixo linha-a-linha e mostre o que será impresso pelo comando printf:


int a = 10, b = 7, c; // 3 variáveis inteiras, 2 delas inicializadas (a e b)
int * p = &a; // p aponta para a variável 'a'
int * q = &b; // q aponta para a variável 'b'
int * r = &c; // r aponta para a variável 'c'
*r = *p; // equivalente a 'c = a' ---> c = 10
*p = *q; // equivalente a 'a = b' ---> a = 7
*q = *r; // equivalente a 'b = c' ---> b = 10
printf("%d  -  %d", a, b); // '7 - 10'


3) Comente o trecho abaixo linha-a-linha e mostre o que será impresso pelo comando printf:


int vet[ ] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };
int * p = &(vet[2]); // p aponta para o terceiro elemento (6)
int i;
for ( i = 1; i <= 6; i++ ) // roda 6 vezes
{ printf ("%d -  ", *p);
p++;
}

Saída: 6 - 8 - 10 - 12 - 14 - 16 -


4) Por que o primeiro scanf abaixo usa o operador '&' e o segundo não?


int x;
scanf("%d", &x);
char nome[50];
scanf("%s", nome);  // nome já é um ponteiro para o início da string por se tratar de um vetor.





   

Comentários

Postagens mais visitadas deste blog