Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337

    [C] funizioni e variabili locali/globali

    quando compilo questo codice, che prende un numero, lo raddoppia con una funzione stampa, c'è qlc che non funziona nella riga di rosso


    codice:
    #include <stdio.h>
    
    int raddoppianumero(int arg);
    
    void main(){
    int numero;
    printf ("inserisci un numero a caso\n");
    scanf ("%d", &numero);
    
    raddoppianumero (numero);
    
    printf ("numero modificato %d\n", numero); // non mi raddoppia la variabile del main 
    
    }
    
    int raddoppianumero (int arg){
        int originale= arg;
    	arg= arg*2;
    	printf ("num %d raddoppiato %d\n", originale, arg);
    return (arg);
    
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Non hai ancora compreso bene il meccanismo ...

    Quando passi numero alla funzione, questo viene copiato in arg (e numero rimane quello che era ...)

    Poi arg viene raddoppiato (ma non numero) e arg viene restituito.

    Quindi, per esempio, se numero vale 5 quando lo passi alla funzione, anche arg varra' 5, ma dopo solo arg varra' 10 (numero sara' ancora 5).

    Quando la funzione restituisce il valore raddoppiato (con la return), tu nel main non lo consideri ... dovresti riassegnarlo a numero ... quindi

    numero = raddoppianumero (numero);

    tanto piu' che hai dichiarato la funzione con

    int raddoppianumero(...

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    chiaro, quindi io non modifico il valore di numero, lo copio in arg che poi viene modificato dalla funzione, la quale mi restituisce il valore di arg senza toccare numero, che quindi deve essere modificato con un assegnamento.

    ok grazie ancora

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ok ... con i "puntatori" questa cosa cambiera' ... potrai modificare direttamente all'interno delle funzioni i valori delle variabili passate ...

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    si , ad esempio quando uso le stringhe modifico esattamente i valori originali.
    adesso faccio una prova, grazie.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    così intendevi:


    (è un codice vecchio modificato)
    codice:
    #include <stdio.h>
    
    int vett[5]= {1,2,3,4,5};
    int i;
    
    void stampa();
    void moltiplica();
    
    int main(){
    
      stampa();
    
      moltiplica();
    
      stampa();
    }
    
    void stampa(){
    	for (i=0; i<5; i++){
    	printf("numero in posiizone %d ->->-> %d \n", i, vett[i]);
    	}
    }
    
    void moltiplica(){
        for (i=0; i<5; i++){
    	vett[i]= (3*vett[i]);
    	printf("numero in posiizone %d ->->-> %d \n", i, vett[i]);
    	}
    }

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    No ... in questo esempio modifichi vett perche' e' globale ...

    Prova a riscrivere la funzione

    raddoppianumero

    dell'esempio precedente, in modo da farle modificare il valore dell'argomento passato e che questa modifica si rifletta sulla variabile in input ...

  8. #8
    OT:
    bentornato faccina
    (stiamo facendo le stesse cose anke noi ora!)

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.