1 Lista De Exerc Cios EDA Ponteiros
805 palavras
4 páginas
Lista de exercícios sobre ponteiros em C(Observação: a lista, se totalmente respondida corretamente vale 0,5 ponto na média final. A lista é individual e deve ser respondida dentro do próprio arquivo Word fornecido. O arquivo com questões e respostas deve ser postado no moodle até dia 19/2/2015 as 23h59. Em caso de plágio, mesmo parcial, todos os envolvidos perderão direito ao ponto extra).
1) Responda as perguntas abaixo dando exemplos de trechos de programa em C.
a) Explique a diferença entre: p++; (*p)++; *(p++);
Tendo num programa uma variável “i” qualquer e um ponteiro “*p” que aponta para essa variável, sabemos que ao executar o comando “p++” ou “*(p++)” teremos um acréscimo de um no endereço que o ponteiro “p” guarda, de acordo com seu tipo de dado, ou seja, se inicialmente “p” apontava um endereço “0x222” agora ele apontaria para “0x226”, tendo sido “*p” declarado como inteiro. Já na execução do comando “(*p)++” obtemos um acréscimo de um no valor da variável que p aponta, que no caso é o “i”, ou seja se “i” inicialmente fosse igual a 5 depois deste comando este passaria a ser 6.
b) O que quer dizer *(p+10); ?
É o ponteiro para o decimo tipo de dado depois de “*p”. Por exemplo se “p” for inicializado como inteiro e apontar para o endereço “0x100”, quando se executar o comando “*(p + 10)” o ponteiro “p” agora apontará o endereço “0x140”.
2) Reescreva a função abaixo usando só álgebra de ponteiros e alocação dinâmica: int** aloca (int x){
//Declarações
float matrx [50][50]; int i, j;
//Instruções
for (i = 0; i < 50; i++){ for (j = 0; j < 50; j++){ matrx[i][j] = x + i + j;
}
} return matrx;
}
int** aloca (int x){ //Declarações float **matrx int i, j; //Instruções matrx = (float **) malloc (50 * sizeof (float *)); for (i = 0; i < 50; i++){ matrx[i] = (float *)malloc (50 * sizeof (float)); *(matrx + i); for(j = 0; j < 50; j++){ **(matrx + j);
**matrx = x + i + j; }
}
return matrx;
}
3) Implemente a