Você está na página 1de 6

Exercícios com Ponteiros

1) Explique o que são ponteiros, faça 3 ilustrações;

2) Descreva o nome e explique o uso dos operadores “&” e “*”;

3.Quais serão os valores de x, y e p ao final do trecho de código abaixo?


int x, y, *p;
y = 0;
p = &y;
x = *p;
x = 4;
(*p)++;
--x;
(*p) += x;

4.Os códigos abaixo possuem erros. Qual(is)? Como deveriam ser?


a) void main() {
int x, *p;
x = 100;
p = x;
printf(“Valor de p: %d.\n”, *p);
}

b) void troca (int *i, int *j) {


int *temp;
*temp = *i;
*i = *j;
*j = *temp;
}

c) char *a, *b;


a = "abacate";
b = "uva”;
if (a < b)
printf ("%s vem antes de %s no dicionário", a, b);
else printf ("%s vem depois de %s no dicionário", a, b);

5) Um ponteiro é:
 O endereço de uma variável
 Uma variável que armazena endereços
 O valor de uma variável
 Um indicador da próxima variável a ser acessada
 NDA

6) O que é declarado no seguinte trecho:


int *ptr;
 Um vetor
 Uma matriz
 Uma variável
 Uma função
 Um ponteiro

7) Dado o seguinte trecho de código:


int *ptr, i;
ptr = &i;
O que ptr contém?
 Valor de i
 Endereço de i
 Endereço de ptr
 Valor de ptr
 NDA

8) O que o seguinte trecho de código faz?


int x, *p;
x = 100;
p = &x;
 Atribui a p o valor de x
 Atribui a p o endereço de x
 Atribui a *p o valor de x
 Atribui a *p o endereço de x
 NDA

9) Dado o trecho de código:


int *p;
int **r;
int a = 10, b = 15, c = 20;
p = &a;
r = &p;
c = **r + b;
Assinale a alternativa correta:
 p contém o valor de a e r contém o endereço de p
 r aponta para o valor de a e c contém o valor de r + b
 p contém o endereço de a e c contém a + b
 c aponta para o endereço de r e p contém o valor de b
 c contém o endereço de r mais o valor de b

10) Qual é a instrução que deve ser adicionada ao seguinte programa de modo
que ele passe a executar corretamente?
int main(){
int j, *pj;
*pj=3;
}

11) Seja o seguinte trecho de programa:


int i=3, j=5;
int *p, *q;
p = &i;
q = &j;

Qual é o valor das seguintes expressões?


a) p == &i;
b) *p - *q
c) **&p

12) Qual será a saída deste programa supondo que i ocupa o endereço 4094 na
memória?

main() {
int i=5, *p;
p = &i;
printf(“%x %d %d %d %d \n”, p,*p+2,**&p,3**p,**&p+4);
}

13) Qual é o resultado do seguinte programa?


#include <conio.h>
#include <stdio.h>
int main(){
float vet[5] = {1.1,2.2,3.3,4.4,5.5};
float *f;
int i;
f = vet;
printf("contador/valor/valor/endereco/endereco");
for(i = 0 ; i <= 4 ; i++){
printf("\ni = %d",i);
printf(" vet[%d] = %.1f",i, vet[i]);
printf(" *(f + %d) = %.1f",i, *(f+i));
printf(" &vet[%d] = %X",i, &vet[i]);
printf(" (f + %d) = %X",i, f+i);
}
getch();
return 0;
}
R:

14) O que é declarado no seguinte trecho:


int **ptr;
 Um vetor
 Um ponteiro para um ponteiro
 Uma variável
 Uma função
 Um ponteiro

15) O que o seguinte trecho declara?


char *linha[80];
 Um vetor
 Um ponteiro para um ponteiro
 Uma variável
 Um vetor de ponteiros
 Um ponteiro

16) Crie um programa que calcula o cubo de um número usando função e


ponteiros.

17) Escreva uma função, usando ponteiros, que inverta a ordem dos caracteres
de uma cadeia de caracteres que ela recebe como argumento.

18) Escrever um programa que preencha um vetor de inteiros de tamanho


definido pelo usuário e o preencha usando a notação ponteiro.

19) Dado o seguinte programa, o que será impresso na tela?


void incrementa (int *a, int b){
*a += b;
}

int main (){


int num;
num=100;
printf (“Valor de num %d\n”, num);
incrementa (&num,50);
printf (“Valor de num %d\n”, num);
}

20) Explique o que acontece em cada linha dos programas e o que


imprimem

A) # i n c l u d e < s t d i o . h>
a)
int main ( ) {
int x = 5 , y = 3 , z ;
int ∗ p ;
p = &x ;
z = 2 ∗ y + ( ∗p ) - x ;
printf (“ z = %d “ , z ) ;
return 0 ;
}

B) # i n c l u d e < s t d i o . h>
b)
int main ( ) {
int x[ ] = { 2 , 4 , 6, 8, 10 } ;
int n = 5 , i ;
int ∗ p ;
p=x;
for ( i = 0 ; i <n ; i ++){
printf (“ % d \ n” , ∗ ( p+ i ) ) ;
}
return 0 ;
}

C) # i n c l u d e < s t d i o . h>
c)
int main ( ) {
int x[ ] = { 1 , 2 , 3 , 4 , 5 } , y [ ] = { 6 , 7 , 8 , 9 , 1 0 } ;
int n = 5 , i ;
int ∗ p , ∗ q ;
p=x;
q=y;
for (i = 0 ; i <n ; i ++)
printf (“ % d \ n” , ∗ ( p+ i ) + ∗ ( q + ( n−1− i ) ) ) ;
return 0 ;
}

D) # i n c l u d e < s t d i o . h>
d)
int main ( ) {
int x[ ] = { 1 , 2 , 3 , 4 , 5 } ;
int ∗ y[ 5 ] ;
i n t n = 5, i;
i n t ∗∗p;
p=y;
for ( i = 0 ; i <n ; i ++) {
∗ ( p+ i )=&x [ i ] ;
}
for ( i = 0 ; i <n ; i ++) {
printf (“ % d \ n” , ∗ ( ∗ ( p+ i ) ) ) ;
}
return 0 ;
}

E) # i n c l u d e < s t d i o . h>
e)
int maior ( int x , int y ) {
i f ( x>y ) return x ;
else return y ;
}
int main ( )
{
int a = 6 , b = 8 ;
int ( ∗ f ) ( ) ;
f =maior ;
printf (“ % d \ n”), f ( a , b ) ) ;
return 0 ;
}

F) # i n c l u d e < s t d i o . h>
f)
int mensagem ( char msg [ ] ) {
printf (“ % s \ n” , msg ) ;
}

int main ( ) {
char a[ ] = “H e l l o W o r l d !”;
int ( ∗ f ) ( ) ;
f = mensagem ;
f(a);
return 0 ;
}