Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156

    [C] by reference e by value

    Salve ragazzi, vi posto il codice di questo programma che dovrebbe cancellare da un'array i valori pari e stampare a video il nuovo array contenente solo elementi dispari. In particolare ho utilizzato un altro array nel quale copiare inizialmente tutti i dispari per poi ritrasferirli in quello iniziale. Purtroppo non riesco a compilarlo poichè il compilatore mi da errori (che suppongo siano evidenti) riguardo il traferimento per riferimento...Ecco il codice, qualcuno potrebbe spiegarmi come gestire il passaggio per riferimento?
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    
    
    
    int lettura(int vet[]);
    int elabora(int vett[], int DIM);
    void stampa(int vetts[], int dimfin);
    
    main()
    {
          int vettore[30],dim;
          dim=lettura(vettore);    
          dim=elabora(vettore,dim);
          stampa(vettore, dim);
          
          
    system("pause");
    
    }
    
    int lettura(int vet[])  /*funzione per la lettura*/
    {
        int dim1,k,n;
        printf("Inserire la dimensione logica del vettore");
        scanf("%d", &dim1);
        for( k=0; k<dim1; k=k+1);
        {
             scanf("%d", &n);
             *vet[k]=n;                                                    
             
        }
        return dim1;
    }
    int elabora(int vett[], int DIM)    /*funzione per la cancellazione dei pari*/
    {
        int k,c,temp[30];
        c=0;
        for(k=0;k<DIM;k=k+1)
        {
                            if(*vett[k]%2!=0)
                            {
                                            temp[c]=*vett[k];
                                            c=c+1;
                            }
        }
        DIM=c;
        k=0;
        for(c=0;c<DIM;c=c+1)
        {
                             *vett[k]=temp[c];
                             k=k+1;
        }
     
        return DIM;
    }
    void stampa(int vetts[],int dimfin)     /*funzione per la stampa*/
    {
         int k;
         for(k=0;k<dimfin;k=k+1)
         {
                                printf("%d", *vetts[k]);
         }
         
    }

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [C] by reference e by value

    Originariamente inviato da slashino
    Purtroppo non riesco a compilarlo poichè il compilatore mi da errori (che suppongo siano evidenti) riguardo il traferimento per riferimento...
    Non è che puoi postare gli errori che ti da il compilatore? Non puoi costringere gli utenti a scaricare il tuo codice, compilarlo e vedere cosa c'è che non va...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Mi scuso per l'inconviente...Posto uno screen:


    Uploaded with ImageShack.us

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481

    Re: [C] by reference e by value

    In questa for

    for( k=0; k<dim1; k=k+1);

    devi togliere il ; finale e devi fare sparire tutti gli *
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Ok per quanto riguarda la for, ma per quanto riguarda gli *, non mi è chiaro. Se per esempio prendiamo in esame questa parte di codice:
    codice:
    int lettura(int vet[])
    {
        int dim1,k,n;
        printf("Inserire la dimensione logica del vettore");
        scanf("%d", &dim1);
        for( k=0; k<dim1; k=k+1)
        {
             scanf("%d", &n);
             *vet[k]=n;                                                    
             
        }
        return dim1;
    }
    Quando faccio l'assegnazione *vet[k]=n se non mettessi l'asterisco modificherei l'indirizzo della variabile del programma principale, dal momento che vet[k] essendo condivisa per riferimento contiene l'indirizzo della variabile associata, o sbaglio?
    La stessa cosa in :
    codice:
    for(k=0;k<DIM;k=k+1)
        {
                            if(*vett[k]%2!=0)
                            {
                                            temp[c]=*vett[k];
                                            c=c+1;
                            }
        }
    Se non mettessi l'asterisco nell'espressione dell'if non sarebbe come se dicessi: se 'indirizzo contenuto in vett[k] è dispari...etc etc?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Se non mettessi l'asterisco nell'espressione dell'if non sarebbe come se dicessi: se 'indirizzo contenuto in vett[k] è dispari...etc etc?
    No ... in vett[k] c'è il valore dell'elemento k del vettore.

    Le chiamate copiano l'indirizzo del vettore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Allora nello scrivere un sottoprogramma quand è che è necessario utilizzare *vicino al nome della variabile? Solo quando queste non sono array? Cioè, con lo scrivere array[k] si indica direttamente il valore contenuto nella cella che è puntata dal parametro formale?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Se passi l'array per puntatore

    int f(int *v);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Limitandoci al linguaggio C, un array può essere passato solo per riferimento, giusto? In questo caso, ciò che ho detto nel messaggio precedente è vero quindi? Lavorando con un elemento array[k] in un sottoprogramma, nel fare per esempio un'assegnazione e volendo modificare l'array del programma principale, devo scrivere array[k]= 3 ( ovvero metto 3 nella cella dell'array del prog. principale) e non *array[k]=3 giusto?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Giusto.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.