Newsgroup: it.comp.lang.c
Titolo: Passaggio di un vettore a una funzione

Salve a tutti, e buon Anno!
Ho un problemino con il passaggio di un parametro di tipo vettore a una
funzione.
Devo creare una funzione che abbia come unico parametro un lista di numeri
interi, oppure se possibile un vettore di interi.
Il problema č che devo passarli direttamente sul parametro della funzione
nel modo piů veloce possibile
e non posso farlo prima perchč dovrei scrivere un'istruzione in piů per
inizializzare il vettore..
io ho provato in questo modo ma non funziona.
avete qualche idea che funzioni ?  :)
grazie mille.
----------------------------------------------------------------
int main(int argc,char **argv) {
  prova(   int pp[] = {1,2,3} );
  printf("\n_%i", ipos);
  getch();
  return 0;
}
void prova( int x[] ) {
   // fa gli opportuni calcoli con il parametro passato, come se fosse un
vettore[] di interi.
}
----------------------------------------------------------------
(p.s. ho omesso le dichiarazioni principali...)

sono newbie,
dalla fretta mi sono dimenticato di cancellare
la riga di codice -->  printf("\n_%i", ipos);
quell riga non c'entra niente!
scusate.

 inizializzare il vettore..
Ma se non inizializzi il vettore, cosa gli passi alla funzione? Forse potresti inizializzarlo a
livello globale, ma poi perdi in dinamicità.
Scusa se te lo chiedo, ma perchè ti poni un problema simile?
Ciao,
Cecco

   prova(   int pp[] = {1,2,3} );
Guarda il codice che segue, fa uso delle liste variabili di argomenti.
Non e' quello che chiedi, ma d'altro canto non capisco perche' tu chieda
quella cosa, se ti spieghi meglio e dici come mai vedro' di aiutarti meglio.
#include<stdio.h>
#include<stdarg.h>
void prova(int n,...);
int main()
{
    prova(5, 12, 45, 18, 22, 2);
    return 0;
}
void prova(int n,...)
{
    int tmp,i;
    va_list ap;
    va_start(ap,n);
    for(i=0;i<n;++i){
        tmp=va_arg(ap,int);
        printf("%d\n",tmp);
    }
    va_end(ap);
}
altrimenti se vuoi assegnare i valori ad un vettore sulla riga di chiamata a
funzione vuoi ricevere come un normale array e non una lista variabile di
argomenti, ecco lo SCHIFO proposto:
#include<stdio.h>
void prova(int size,int *p)
{
    printf("%d-%d-%d\n",p[0],p[1],p[2]);
}
int main()
{
    int p[3];
    prova(3,(p[0]=12,p[1]=13,p[2]=7,p));
    return 0;
}
Ma e' piu' uno scherzo che altro ;-)
Non capisco cosa ci sarebbe di male a mettere i valori prima della chiamata
prova() ?!?!?
Fammi sapere,
Tommy

 prova() ?!?!?
vedi sopra,
mettere i valori prima della chiamata peggiora la leggibilità del codice,
che è gia
incasinato di per se. ;)
grazie.
ciao
Davide


grazie ancora per i suggerimenti.
ciao.
Davide.

 }
Aspetta un attimo...
a cosa serve l'ultimo parametro ",p))"  !?!?
questa mi č nuova!  :o
ciao
davide

 ha scritto nel messaggio news:RtpR9.77552$Ou4.2...@twister2.libero.it...

La funzione prova accetta due parametri, un intero ed un puntatore ad intero; nel main il secondo
parametro viene passato utilizzando "l'operatore" di concatenamento "( , )". In pratica serve per
concatenare diversi statement in una stessa riga: ha come valore di ritorno l'ultimo statement della
sequenza. Nel nostro caso viene usato per inizializzare l'array, e poi per passare il puntatore.
Occhio però che, oltre ad esse brutto, ha lo stesso identico effetto di questo codice:
int main()
{
    int p[3];
    p[0] = 12;
    p[1] = 13;
    p[2] = 7;
    prova(3, p);
}
cioè in pratica non ti serve a niente.
In ogni caso quello che chiedi tu non e`possibile: scrivere codice più compatto non equivale ad
ottimizzarlo, ed inoltre può renderlo molto meno leggibile. Ci pensa già il compilatore (se è un
buon compilatore) ad ottimizzare il possibile, il programmatore dovrebbe piuttosto pensare ad
ottimizzare il design del programma.
Ciao,
Cecco

 veloce! :)
Vedi la risposta al tuo altro post. Comunque per vedere se il programma generato è più efficente,
dovresti per lo meno decompilarlo, non si può vedere a occhio dal codice scritto!
Ciao,
Cecco

 > >     prova("\x3\x1\x2\x3");
s[0] -> numero degli elementi
s[1] -> primo elemento
s[1] -> secondo elemento
s[2] -> terzo elemento
l'importante era che potessi passare una serie di numeri per usarli come
numeri interi all'interno della funzione
senza suddividere la stringa in sottostringhe.
ciao
grazie a tutti.