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 Aula 5 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])();