home *** CD-ROM | disk | FTP | other *** search
/ ftp.disi.unige.it / 2015-02-11.ftp.disi.unige.it.tar / ftp.disi.unige.it / pub / .person / CataniaB / teach-act / esempi / Puntatori / parpunt.c < prev    next >
C/C++ Source or Header  |  1997-04-08  |  1KB  |  63 lines

  1. #include <stdio.h>
  2. /* Sveliamo il mistero degli array  come parametri:  
  3.    "TIPO *a"   e' compatibile  con  "TIPO  a[n]"
  4. */
  5.  
  6. void print_int_array(int *a)   /*  OPPURE:  void print_int_array(int a[]) */
  7. { int i;
  8.   for (i=0;i<4;i++) printf(" %d",a[i]);  
  9. }
  10.  
  11. void empty_string(char a[])          /* cancella a!! */  
  12. {  
  13.   a[0]='\0'; 
  14. }
  15.  
  16. /* EQUIVALE A:
  17.  
  18. void empty_string(char *a)              
  19.   *a='\0';        
  20.  }
  21.  
  22.  Quindi nel caso di array come parametri: si passa sempre il puntatore 
  23.  (il nome a) e si usa/modifica la locazione a[i]!! Cioe': 
  24.  passaggio per riferimento! Ottimizza la gestione dei parametri!!). 
  25. */
  26.  
  27. /* esempio limite: */
  28. void ex(int *a);         /* dichiaro come punt. a char */
  29. void ex(int a[]){};      /* definisco come array di char OK */
  30.  
  31. main()
  32. {
  33.   int  a[4]={8,9,7,6};
  34.   char s[5]="abcd"; 
  35.  
  36.   print_int_array(a);  /* notare che &a==a per nomi di array! */
  37.  
  38. /* output: 8 9 7 6 */
  39.  
  40.   empty_string(s);    /* ...&s==s  */
  41.   printf("%s",s);
  42.  
  43. /* output:  */ 
  44.  
  45. /* IMPORTANTE:
  46.     Le costanti di tipo stringa del tipo "abcd" sono a loro volta 
  47.     puntatori costanti (cioe' non si puo' modificare il loro contenuto). */  
  48.   {
  49.     char t[]="abcd";   /* COPIA abcd in t!! */
  50.  
  51.     char *r="abcd";   /* Legale: assegna il puntatore ad r (ma non fa la 
  52.                          copia dei contenuti) */
  53.                         
  54.     printf("%s",r);   /* OK utilizzo r */        
  55.  
  56. /*  ma NON si puo' modificare *r!!  
  57.  
  58.     cioe' NO: r[0]='k'  (segmentation fault!) */
  59.    
  60.  } 
  61. }
  62.