Exercícios
1) (Aritmética de ponteiros) Implemente duas versões da função strlen, uma em que utiliza índices e outra em que aplique aritmética de ponteiros.
Recorde a implementação do tipo de dados Complexo da 4ª Aula de laboratório e da função complexo soma(complexo a, complexo b) que recebe dois números complexos como argumento e devolva a soma dos dois.
2) (Ponteiros) Altere a função desenvolvida no exercício anterior por forma a que esta não devolva o resultado da soma mas que o resultado da soma venha no primeiro argumento da função.
3) (Ponteiros) Altere a função desenvolvida no exercício anterior por forma a que a função devolva um ponteiro para um número complexo que tem o resultado da soma.
4) Declare as seguintes variáveis em C:
- um ponteiro para um inteiro;
- um ponteiro para um ponteiro para um inteiro;
- um vector de ponteiros para inteiros, com dimensão 20;
- um ponteiro para uma função que devolve um ponteiro para um inteiro e recebe como argumentos dois inteiros;
- um vector de ponteiros para funções que devolvem void e não recebem argumentos, com dimensão 10.
Sugestões de resolução
1)
int strlen_pointers(char *str)
{
char *s=str;
while(*s!='\0')
s++;
return (s - str);
}
int strlen_arrays(char s[])
{
int i=0;
while(s[i]!='\0')
i++;
return (i);
}
2)
void soma(Complexo*a, Complexo*b)
{
a->real+=b->real;
a->img+=b->img;
}
3)
Complexo* soma2(Complexo*a, Complexo*b)
{
Complexo*p = (Complexo*)malloc(sizeof(Complexo));
p->real= a->real+ b->real;
p->imag= a->imag+ b->imag;
return p;
}
4)
a) int* ptr;
b) int** ptr;
c) int* ptr[20];
d) int *(*ptr)(int,int);
e) void (*ptr[10])();