Redes
Unidade Acadêmica da Área de Ciências Exatas e Tecnológicas
Tecnologia em Gestão de Sistemas Informatizados
Exercícios SO
1) Por que o código abaixo está errado?
void troca (int *i, int *j) {
int *temp;
*temp = *i; *i = *j; *j = *temp;
}
R: Quando se faz *temp = *i, copia-se o conteúdo de memória apontado pelo ponteiro i para o endereço apontado pelo ponteiro temp. Porém, o endereço onde temp aponta é lixo, uma vez que não foi inicializado.
Um ponteiro pode ser usado para dizer a uma função onde ela deve depositar o resultado de seus cálculos. Escreva uma função xxx que converta minutos em horas-e-minutos. A função recebe um inteiro mnts e os endereços de duas variáveis inteiras, digamos h e m, e atribui valores a essas variáveis de modo que m seja menor que 60 e que 60*h + m seja igual a mnts. Escreva também uma função main que use a função xxx.
#include
void xxx(int mnts, int *h, int *m){
*h = mnts/60; *m = mnts%60;
}
void main(){ int mnts,h,m;
printf("Entre com a quantidade de minutos que deseja converter: "); scanf("%d",&mnts);
xxx(mnts,&h,&m); printf("\nHoras: %d",h); printf("\nMinutos: %d",m);
}
Suponha que os elementos do vetor v são do tipo int e cada int ocupa 8 bytes no seu computador. Se o endereço de v[0] é 55000, qual o valor da expressão v + 3?
R: (v+3) aponta para o terceiro número inteiro. Pensando um pouco, sabemos que o endereço 55000 até o 55007 está sendo usado para o primeiro inteiro, pois ocupa 8 posições. Dessa forma, o terceiro inteiro estará no endereço 55024.
O que há de errado com o seguinte trecho de código?
char *a, *b;
a = "abacate"; b = "uva"; if (a < b)
printf ("%s vem antes de %s no dicionário", a, b);
else
printf ("%s vem depois de %s no dicionário", a, b);
R: Da mesma forma que o exercício 1, os ponteiros a e b não foram alocados, ou seja, apontam para posições de memória desconhecidas, ou que já estão sendo