Pratica De Ponteiros 2
Márcio Fantini – Setembro 2007
1. O que imprime o programa a seguir? Tente entendêlo e responder. A seguir, executeo e comprove o resultado.
# include <stdio.h> int main()
{
int t, i, M[3][4]; for (t=0; t<3; ++t) for (i=0; i<4; ++i) M[t][i] = (t*4)+i+1; for (t=0; t<3; ++t) { for (i=0; i<4; ++i) printf ("%3d ", M[t][i]); printf ("\n"); } return(0);
}
2. Responda as perguntas abaixo. Se achar necessário, faça testes no programa em C.
a) Explique a diferença entre p++; (*p)++; *(p++);
b) O que quer dizer *(p+10);? c) Explique o que você entendeu da comparação entre ponteiros (veja apostila páginas 54 e 55)
3. Qual o valor de y no final do programa? Tente primeiro descobrir e depois verifique no computador o resultado. A seguir, 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.
int main()
{
int y, *p, x; y = 0; p = &y; x = *p; x = 4; (*p)++; x; (*p) += x; printf ("y = %d\n", y); return(0);
}
4. Reescreva o programa abaixo usando ponteiros int main ()
{
float matrx [50][50]; int i,j; for (i=0;i<50;i++) for (j=0;j<50;j++) matrx[i][j]=0.0; return(0);
}
5. Diga quais expressoes abaixo sao válidas ou não. Considere as declarações int vetor[10]; int *ponteiro;
a) vetor = vetor + 2;
b) vetor++;
c) vetor = ponteiro; d) ponteiro = vetor; e) ponteiro = vetor+2;
6. Explique o que faz o programa abaixo
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("