![]() |
Show 150 posts per page |
.dsy:it. (http://www.dsy.it/forum/)
- Tech (http://www.dsy.it/forum/forumdisplay.php?forumid=189)
-- [C] Passaggio di array a funzione (http://www.dsy.it/forum/showthread.php?threadid=21702)
[C] Passaggio di array a funzione
Ciao, devo passare un array di puntatori ad una funzione (in C), ma mi sto incasinando... O_o
Ho un array di puntatori a file dichiarato nel seguente modo:
code:
FILE *array[5];
code:
void chiudi(FILE *array);
code:
chiudi(array);
__________________
Chiamatemi Darky ^_^
_____ -+- ANTINOMY -+- __________ -+- Inside Human Cruelty -+- _____
Re: [C] Passaggio di array a funzione
Originally posted by DarkGod
Quando compilo però mi da un warning: "passing arg 1 of 'chiudi' from incompatibile pointer type".
Ma "array" scritto da solo non dovrebbe essere il puntatore al primo elemento dell'array?
In cosa sto sbagliando?? O__o'
__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~
Re: Re: [C] Passaggio di array a funzione
Originally posted by DeepBlue
Esatto, dovrebbe. Però ti ha dato solo un warning, cosa che con i puntatori non è così infrequente. (poi se c'è un errore, ora come ora non te lo so dire).
Oltre al quel warning c'è altro? se lo fai girare, funziona?
EDIT: sicuro che la funzione "chiudi" sia corretta? Nel prototipo hai scritto una cosa, nella chiamata un'altra!
__________________
Chiamatemi Darky ^_^
_____ -+- ANTINOMY -+- __________ -+- Inside Human Cruelty -+- _____
cambia:
void chiudi(FILE *array);
in
void chiudi(FILE *array[]);
o
void chiudi(FILE **array);
Se non lo hai già fatto compila (suppongo gcc
) con -Wall
[edit] Ti consiglio la prima 
__________________
?
Originally posted by yeah
cambia:
void chiudi(FILE *array);
in
void chiudi(FILE *array[]);
o
void chiudi(FILE **array);
Se non lo hai già fatto compila (suppongo gcc) con -Wall
[edit] Ti consiglio la prima![]()

__________________
Chiamatemi Darky ^_^
_____ -+- ANTINOMY -+- __________ -+- Inside Human Cruelty -+- _____
La differenza tra i miei suggerimenti è nulla, poichè quando richiamerai quella funzione gli passerai l'indirizzo di un vettore di puntatori, che è appunto un puntatore ad un puntatore 
Le hai provate tutte e due? Perchè la seconda non l'ho mai usata (sono i due modi di dichiarare il secondo argomento del main).
Credo la differenza possa essere nell'intenzione dichiarata: se è un array di puntatori il compilatore può aspettarsi che la variabile venga usata come vettore (quindi cose tipo *(ptr + i)) mentre un puntatore a puntatore dovrebbe essere usato solo direttamente.
Questa è però una differenza che il compilatore potrebbe fare, ma che non ho mai riscontrato, dal lato funzionale non cambia nulla.
Tornando a quanto avevi scritto tu, la differenza è che il tuo prototipo si aspettava un puntatore a file, mentre gli passavi un puntatore ad un puntatore a file.
Per eliminare il warning avresti dovuto chiamare la funzione così
code:
chiudi(array[0]);
code:
chiudi(&array[0]);
code:
chiudi(array);

__________________
?
Originally posted by yeah
La differenza tra i miei suggerimenti è nulla, poichè quando richiamerai quella funzione gli passerai l'indirizzo di un vettore di puntatori, che è appunto un puntatore ad un puntatore
Le hai provate tutte e due? Perchè la seconda non l'ho mai usata (sono i due modi di dichiarare il secondo argomento del main).
Credo la differenza possa essere nell'intenzione dichiarata: se è un array di puntatori il compilatore può aspettarsi che la variabile venga usata come vettore (quindi cose tipo *(ptr + i)) mentre un puntatore a puntatore dovrebbe essere usato solo direttamente.
Questa è però una differenza che il compilatore potrebbe fare, ma che non ho mai riscontrato, dal lato funzionale non cambia nulla.
Tornando a quanto avevi scritto tu, la differenza è che il tuo prototipo si aspettava un puntatore a file, mentre gli passavi un puntatore ad un puntatore a file.
Per eliminare il warning avresti dovuto chiamare la funzione così
code:
chiudi(array[0]);
code:
chiudi(&array[0]);
code:
chiudi(array);

__________________
Chiamatemi Darky ^_^
_____ -+- ANTINOMY -+- __________ -+- Inside Human Cruelty -+- _____
| All times are GMT. The time now is 04:52. | Show all 7 posts from this thread on one page |
Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.