Laboratorio di Programmazione. AA 2005/06.
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. 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;
    }


  3. 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.

  4. 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;
    }