Exerc cios Ponteiros
PONTEIROS:
1) O que imprime o programa a seguir? Tente entendêlo e responder.
A seguir, execute-o e comprove o resultado.
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++);
- p++: incrementa o ponteiro (endereço).
- (*p)++:
Incrementa o conteúdo apontado por p.
- *(p++):
Incrementa p e acessa o valor encontrado na nova posição.
b) O que quer dizer *(p+10);? Acessa o valor encontrado 10 posições a frente de p.
c) Explique o que você entendeu da comparação entre ponteiros
Serve para verificar se os ponteiros são iguais ou diferentes e qual sua posição na memória.
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; /* atribui o valor 0 a y = > y = 0 */ p = &y; /* atribui o endereço de y ao ponteiro p, p contém o endereço de y */ x = *p; /* atribui o conteúdo de onde p aponta (valor de y) para x, que passa a valer 0 */ x = 4; /* atribui 4 a x */
(*p)++; /* incrementa de 1 o conteúdo de onde p aponta, alterando o valor de y para 1 */ x; /* decrementa 1 de x => x = 3 */ (*p) += x; /* adiciona x ao conteúdo de onde p aponta, alterando o valor de y para 4 */ printf ("y = %d\n", y); /* imprime "y = 4" */ return(0);
}
4) Reescreva o programa abaixo usando ponteiros