Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657

    [C++] - Aiuto puntatore

    Il concetto dei puntatori ancora nn mi è kiaro:

    *variabile = &intero;
    *variabile = intero;

    cosa succede in entrambi i casi?

    void nome_funz (int &ciao);
    void nome_funz (int *ciao);

    che cosa cambia in entrabi i casi?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,476
    Per quanto riguarda le funzioni, passi il valore sempre per indirizzo, ma nel secondo caso devi usare il parametro come puntatore al dato; nel primo, puoi usare il parametro direttamente.

    codice:
    void nome_funz1(int &ciao)
    {
       ciao = 5;
    }
    
    void nome_funz2(int *ciao)
    {
       *ciao = 4;
    }
    
    int main()
    {
       int a=8;
    
       nome_funz1(a);
       printf("%d\n", a);
    
       nome_funz2(&a);
       printf("%d\n", a);
    
       return 0;
    }
    Se il parametro viene passato per valore, lavori come nel primo caso ma le modifiche non influenzeranno il dato passato ma solamente una sua copia temporanea.

    Per i puntatori, devi precisare meglio come hai dichiarato ed inizializzato le due variabili ...

  3. #3
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772

    Re: [C++] - Aiuto puntatore

    Una variabile è un'area di memoria cui puo essere associato un nome ed un valore. Cio che la rende unica è l'indirizzo di memoria, non il nome.

    Questo significa che tu puoi avere piu variabili con lo stesso nome cosi come piu variabili senza nome. Ognuna di esse, in ogni caso, è resa unica dal proprio indirizzo.

    esempio del primo caso

    {
    int x;
    {
    int x;
    }
    }


    esempio del secondo, una qualunque variabile allocata dinamicamente tramite puntatore.



    Il tipo di valore che la variabile puo contenere, dipende appunto dal tipo di variabile dichiarato.

    Un puntatore è una variabile (e quindi ha un indirizzo di memoria proprio ed unico) con una particolarità: come valore ha l'indirizzo di un'altra variabile (quindi hanno tutti dimensione 2 bytes, perche sono quelli necessari per contenere un indirizzo).


    Il concetto dei puntatori ancora nn mi è kiaro:

    *variabile = &intero;
    *variabile = intero;

    cosa succede in entrambi i casi?
    se hai queste definizioni:
    typename intero;
    typename *variabile;


    Nel primo caso con variabile punti all'area di memoria di intero e quindi puoi manipolare intero attraverso variabile.

    Nel secondo hai un errore di compilazione (devi passare un indirizzo)



    Se invece intero è definito come
    typename *intero;

    Cioè anche intero è un puntatore allo stesso tipo di dato di variabile, allora il primo caso ti da errore perche variabile è un puntatore a typename e non un puntatore a puntatore a typename (doveva essere un doppio puntatore per essere corretto).

    Mentre al contrario adesso la seconda istruzione ha senso: entrambe puntano all'oggetto cui intero punta gia (se punta a qualcosa).

    void nome_funz(int &ciao);
    void nome_funz(int *ciao);

    che cosa cambia in entrabi i casi?
    Nel primo caso, nella funzione nome_funz, lavori direttamente sull'oggetto originale.

    Nel secondo, in teoria lavori per valore (perche tu passi il valore del suo indirizzo di memoria). In pratica poi puoi lavorare indirettamente su ciao attraverso il puntatore.

    Se nn sei abituato alla sintassi dei puntatori la reference ti è piu comoda perche la sintassi è la stessa di una normale variabile.

    Se poi in realtà vuoi passare l'oggetto per reference ma nn vuoi che sia modificato nella funzione, metti const e sei a posto.

    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

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 © 2024 vBulletin Solutions, Inc. All rights reserved.