Prévia do material em texto
UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL Sistemas de Informação - CPTL Algoritmos e Programação II UFMS Lista de Exercícios � Ponteiros Exercício 1 Se i é uma variável e p é uma variável ponteiro que aponta para i, quais das seguintes expressões são apelidos para i? (a) *p (b) &p (c) *&p (d) &*p (e) *i (f) &i (g) *&i (h) &*i Exercício 2 Se i é uma variável do tipo int e p e q são ponteiros para int , quais das seguintes atribuições são corretas? (a) p = i; (b) *p = &i; (c) &p = q; (d) p = &q; (e) p = *&q; (f) p = q; (g) p = *q; (h) *p = q; (i) *p = *q; Exercício 3 Descreva brevemente o que o programa a seguir faz. #include <stdio.h> int main(void) { int a, b, *pt1, *pt2; pt1 = &a; pt2 = &b; a = 1; (*pt1)++; b = a + *pt1; pt2 = *pt1 * *pt2; printf("a=%d, b=%d, *pt1=%d, *pt2=%d\n", a, b, *pt1, *pt2); return 0; } 1 UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL Sistemas de Informação - CPTL Exercício 4 Descreva brevemente o que o programa abaixo faz. #include <stdio.h> int main(void) { int a, b, c, *ptr; a = 3; b = 7; printf("a=%d, b=%d\n", a, b); ptr = &a; c = *ptr; ptr = &b; a = *ptr; ptr = &c; b = *ptr; printf("a=%d, b=%d\n", a, b); return 0; } Exercício 5 Descreva brevemente o que o programa abaixo faz. #include <stdio.h> int main(void) { int i, j, *p, *q; p = &i; q = p; p = 1; printf("i=%d, *p=%d, *q=%d\n", i, *p, *q); q = &j; i = 6; q = *p; printf("i=%d, j=%d, *p=%d, *q=%d\n", i, j, *p, *q); return 0; } Exercício 6 Suponha que as declarações e atribuições simultâneas tenham sido realizadas nas variáveis listadas abaixo: int v[] = {5, 15, 34, 54, 14, 2, 52, 72}; int *p = &v[1], *q = &v[5]; (a) Qual o valor de *(p + 3) ? (b) Qual o valor de *(q - 3) ? (c) Qual o valor de q - p ? (d) A expressão p < q tem valor verdadeiro ou falso? 2 UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL Sistemas de Informação - CPTL (e) A expressão *p < *q tem valor verdadeiro ou falso? Exercício 7 Qual o conteúdo do vetor v após a execução do seguinte trecho de código? . . . #define N 10 int main(void) { int v[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int *p = &v[0], *q = &v[N - 1], temp; while (p < q) { temp = *p; p++ = *q; q-- = temp; } . . . Exercício 8 Suponha que v é um vetor e p é um ponteiro. Considere que a atribuição p = v; foi realizada previamente. Quais das expressões abaixo não são permitidas? Das restantes, quais têm valor verdadeiro? (a) p == v[0] (b) p == &v[0] (c) *p == v[0] (d) p[0] == v[0] 3