Lista de Ponteiros
1. 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 = 0x28ff44 (endereço de i)
b) *p - *q = 3-5=-2
c) **&p = 3
d) 3* - *p/(*q)+7 = 3*(-3)/5+7=-9/12
2.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);
}
RESPOSTA: 28ff44, 7, 5, 15, 9
3. Se i e j são variáveis inteiras e p e q ponteiros para int, quais das seguintes expressões de atribuição são ilegais?
a) p = &i; correta
b) *q = &j; inválida
c) p = &*&i;correta
d) i = (*&)j; inválida
e) i = *&j; correta
f) i = *&*&j; correta
g) q = *p; inválida
h) i = (*p)++ + *q; correta
4. Qual serão as saídas do seguinte programa? 20 29.0 A r A r o 31 45 27 31 45 27
5. Qual é o resultado do seguinte programa? contador/valor/valor/endereco/endereco i = 0 vet[0] = 1.1 *(f + 0) = 1.1 &vet[0] = 28FF20 (f + 0) = 28FF20 i = 1 vet[1] = 2.2 *(f + 1) = 2.2 &vet[1] = 28FF24 (f + 1) = 28FF24 i = 2 vet[2] = 3.3 *(f + 2) = 3.3 &vet[2] = 28FF28 (f + 2) = 28FF28 i = 3 vet[3] = 4.4 *(f + 3) = 4.4 &vet[3] = 28FF2C (f + 3) = 28FF2C i = 4 vet[4] = 5.5 *(f + 4) = 5.5 &vet[4] = 28FF30 (f + 4) = 28FF30
6. Assumindo que pulo[] é um vetor do tipo int, quais das seguintes expressões referenciam o valor do terceiro elemento da matriz?
a) *(pulo + 2) b) *(pulo + 4) c) pulo + 4 d) pulo + 2
RESPOSTA: letra D
7. Supor a declaração: int mat[4], *p, x; Quais expressões são válidas?
Justifique:
a) p = mat + 1; Válida
b) p = mat++; Inválida
c) p = ++mat; Inválida
d) x = (*mat)++; Válida
8. O que fazem os seguintes programas?
a)
#include
#include
void main(){ int vet[] = {4,9,13}; int i;