Laboratorio di Programmazione. AA 2004/05.
Esercitazione n. 7

Scopo di questa esercitazione è di familiarizzarsi con i puntatori e functions.

Al solito, si suggerisce di creare una directory apposita per i files relativi a questa esercitazione.


     
  1. Dato il seguente programma
       #include <stdio.h>
    int main(void){
    float a= 1.30, *ip, *iq;
    ip = &a;
    iq = ip;
    printf("valore di a: %f,
    indirizzo di a: %p \n", a, &a);
    return 0;
    }
    Aggiungere anche la scrittura di
     *ip, &ip, ip
    con i convertitori di formato  corretti  ( %p per i puntatori e %f per i float ).

  2. Riscrivere il programma per la soluzione delle equazioni di secondo grado in modo da utilizzare una function che accetti in input  (come argomenti) i tre coeficienti  (reali) e fornisca, attraverso due ulteriori argomenti, di tipo  puntatori a float, i valori delle due radici. Ricordiamo che se una function ha un argomento puntatore, nell' invocazione della function a quell' argomento deve corrispondere un indirizzo (che poi e' il valore del puntatore). Es:
    void  funz( int a, int *b );

    int main(void){
    int
    z;
    ...
    funz( 2, &z );
    ...
     

  3. Qual e' l' output di questo programma ?
     
    #include <stdio.h>
    void fun(int, int *);

    int main(void)
    {
    int u,v;
    u=5;
    v=2;
    fun(u,&v);
    printf("%d %d \n",u,v);
    return 0;
    }
    void fun(int x, int *y)
    {
    int u=-10,v;
    v = x + *y;
    x = v - *y;
    *y = x - u;
    return;
    }


  4. (Facoltativo). Usare l' operatore sizeof  per ricavare l' occupazione di memoria d: un puntatore a interi, un puntatore a float, uno a double e un puntatore a char.

  5. Nel seguente programma si vorrebbero scrivere i  valori dei puntatori e delle rispettive indirezioni  per ciascuna variabile. C'e' pero' un errore grave. Compilare il programma cosi' come e' ed eseguirlo. Dopo aver individuato l' errore, correggerlo e vedere quale e' l'output corretto. Cosa e' cambiato rispetto a prima ?
    #include <stdio.h>


    int main(void)
    {
    int i=10,*ip;
    float r=22.45,*rp;
    double d=3.1416,*dp;
    char c='a',*cp;


    printf(" puntatore = %p, val= %d \n",ip,*ip);
    printf(" puntatore = %p, val= %f \n",rp,*rp);
    printf(" puntatore = %p, val= %lf \n",dp,*dp);
    printf(" puntatore = %p, val= %c \n",cp,*cp);

    return 0;
    }