PDA

Visualizza la versione completa : [C/C++]: Passare un vettore ad una funzione


f@nt@m@n
14-09-2006, 21:50
Ciao a tutti,
il mio testo di C dice che per passare un vettore alla funzione si deve procedere in questo modo:


...
void funzVettore (int b[], 10);

int main()
{
...
funzVettore (a, 10);
}
void funzVettore (int b[], 10)
{...}
Per in alcuni esempi successivi trovo chiamata, prototipo e definizione di funzione privi dell'indice del vettore tra i parametri (Es. void funzVettore (int b[])).
E' corretto in entrambi i modi?

Last_Winter
15-09-2006, 09:29
Ciao, v passato il puntatore all'array non l'array stesso....



#include <stdio.h>
void funzVettore (int* b);

int main(int argc, char* argv[])
{
int a [10];

a[0]=0;
a[1]=1;

int *b = a;
funzVettore (b);
return 0;
}

void funzVettore (int *c)
{
printf ("%i",c[1]);
return;

}

oregon
15-09-2006, 09:54
Ma sei sicuro che il tuo libro riporti questa linea

void funzVettore (int b[], 10);

per la dichiarazione della funzione?

f@nt@m@n
15-09-2006, 10:53
Originariamente inviato da Last_Winter
Ciao, v passato il puntatore all'array non l'array stesso....
Non ho ancora studiato i puntatori per cui mi risulta difficile capire il tuo codice


Originariamente inviato da oregon
Ma sei sicuro che il tuo libro riporti questa linea

void funzVettore (int b[], 10);

per la dichiarazione della funzione?
:dh: Hai ragione, l'ho trascritto male, mi sono perso un int tra parentesi


...
void funzVettore (int b[], int 10);

int main()
{
...
funzVettore (a, 10);
}
void funzVettore (int b[], int 10)
{...}
In altri casi l'indice non riportato come ho detto prima.

oregon
15-09-2006, 11:01
Continuo ad essere perplesso ...

Sei sicuro che il testo riporti una costante numerica (10) nella dichiarazione della funzione

void funzVettore (int b[], int 10);


???

Quali sono il titolo e l'autore del libro?

f@nt@m@n
15-09-2006, 11:16
Il Deitel. Questo l'esempio in questione (un po' abbreviato):


#include <stdio.h>
#define SIZE 5

void modifyArray( int b[], int size );

int main()
{
int a[ SIZE ] = { 0, 1, 2, 3, 4 };
int i;

printf( "Effects of passing entire array by reference:\n\nThe "
"values of the original array are:\n" );

for ( i = 0; i < SIZE; i++ ) {
printf( "%3d", a[ i ] );
}

printf( "\n" );

modifyArray( a, SIZE );

printf( "The values of the modified array are:\n" );

for ( i = 0; i < SIZE; i++ ) {
printf( "%3d", a[ i ] );
}
}
void modifyArray( int b[], int size )
{
int j;

for ( j = 0; j < size; j++ ) {
b[ j ] *= 2;
}
}
Non riporta l'indice ma SIZE. Non lo stesso ?? (il libro non per niente chiaro in questo punto). Perch poi in altri esempi chiamata (...), prototipo (int...[]) e definizione (int...[]) hanno solo il nome del vettore tra parentesi?
Spero di essere stato pi chiaro, scusa se ho fatto un po' di confusione :confused:

andbin
15-09-2006, 12:02
Originariamente inviato da Last_Winter
Ciao, v passato il puntatore all'array non l'array stesso....



int *b = a;
funzVettore (b); E passare semplicemente 'a', no??? :D

funzVettore (a);

'a' da solo, infatti gi l'indirizzo dell'array!

andbin
15-09-2006, 12:06
Originariamente inviato da f@nt@m@n
Non riporta l'indice ma SIZE. Non lo stesso ??Nell'esempio, SIZE una costante e size il parametro della funzione. Sono 2 cose diverse. C, C++ sono linguaggi case-sensitive.

Poi comunque mettere un parametro int b[] equivalente a int *b.

oregon
15-09-2006, 12:09
Originariamente inviato da f@nt@m@n

Non riporta l'indice ma SIZE. Non lo stesso ??

No ... non e' lo stesso ... rifletti sul significato di

- costante

- parametro di una funzione

e sulle differenze

f@nt@m@n
15-09-2006, 12:30
Quello che volevo dire scrivere modifyArray (a, SIZE) e scrivere modifyArray (a, 5) in questo caso lo stesso, no?? E se cos, possibile anche ometterlo scrivendo modifyArray (a)?? :dh:

Loading