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 >
Wrap
C/C++ Source or Header
|
1997-04-08
|
1KB
|
63 lines
#include <stdio.h>
/* Sveliamo il mistero degli array come parametri:
"TIPO *a" e' compatibile con "TIPO a[n]"
*/
void print_int_array(int *a) /* OPPURE: void print_int_array(int a[]) */
{ int i;
for (i=0;i<4;i++) printf(" %d",a[i]);
}
void empty_string(char a[]) /* cancella a!! */
{
a[0]='\0';
}
/* EQUIVALE A:
void empty_string(char *a)
{
*a='\0';
}
Quindi nel caso di array come parametri: si passa sempre il puntatore
(il nome a) e si usa/modifica la locazione a[i]!! Cioe':
passaggio per riferimento! Ottimizza la gestione dei parametri!!).
*/
/* esempio limite: */
void ex(int *a); /* dichiaro come punt. a char */
void ex(int a[]){}; /* definisco come array di char OK */
main()
{
int a[4]={8,9,7,6};
char s[5]="abcd";
print_int_array(a); /* notare che &a==a per nomi di array! */
/* output: 8 9 7 6 */
empty_string(s); /* ...&s==s */
printf("%s",s);
/* output: */
/* IMPORTANTE:
Le costanti di tipo stringa del tipo "abcd" sono a loro volta
puntatori costanti (cioe' non si puo' modificare il loro contenuto). */
{
char t[]="abcd"; /* COPIA abcd in t!! */
char *r="abcd"; /* Legale: assegna il puntatore ad r (ma non fa la
copia dei contenuti) */
printf("%s",r); /* OK utilizzo r */
/* ma NON si puo' modificare *r!!
cioe' NO: r[0]='k' (segmentation fault!) */
}
}