Linguagem c
1. O que é um ponteiro? E para que serve um ponteiro? 2. Quais das seguintes instruções são corretas para declarar um ponteiro? Justifique cada uma delas. a) int_ptr x; c) *int ptr; b) int *ptr; d) *x;
3. Qual é maneira correta de referenciar ch, assumindo que o endereço de ch foi atribuído ao ponteiro indica? a) *indica; c) *int indica; e) ch 4. Na expressão float *pont; o que é do tipo float? a) a variável pont c) o endereço de pont b) a variável apontada por pont d) nenhuma das anteriores b) *indica ch; d) *ch;
5. Assumindo que o endereço de num foi atribuído a um ponteiro pnum, justifique cada uma das expressões abaixo, indicando as verdadeiras. a) num == &pnum c) num == *pnum b) pnum == *num d) pnum == &num
6. Assumindo que queremos ler o endereço de x, e o endereço de x foi atribuído a px, a instrução seguinte está correta? Por que? scanf (“%d”, *px); 7. Qual é a instrução que deve ser adicionada ao programa seguinte para que ele trabalhe corretamente? main () { float j, *pj; *pj=173; } 8. Assumindo que o endereço da variável x foi atribuído a um ponteiro px, excreva uma expressão que não usa x e divida x por 3. 9. Qual o valor das seguintes expressões:
int i = 3, j = 7; int *p = &i, *q = &j;
a) p == &i c) **&p 10. Qual a saída deste programa?
b) *p - * q d) *q;
main () { int i = 6, *p = &i; printf (“%u, %d, %d, %d, %d, \n”, p, *p+2, **&p, 3**p, **&p+4); } 11. Se i e j são variáveis inteiras e p e q são ponteiros para inteiros, quais das seguintes expressões de atribuição são ilegais? Comente cada expressão. a) P = &i; c) *q = &j; e) p = &*&i; g) i = (*&)j; 12. Dada a seguinte sequencia de instruções em um programa C: int *ptr_i; int i = 10; ptr_i = &i; Qual a afirmativa é falsa? Justifique.
a) ptr_i armazena o endereço de i c) *ptr_i = 10 e) ptr_i = 10 b) ao se executar *ptr_i = 20, i passará a ter o valor 20 d) ao se alterar o valor de i, *ptr_i será