Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C]: puntatori: informazioni generali

    Ho appena messo piede nel modo della programmazione in C, dopo esser passato per PHP,Java,Python e altri...il primo problema teorico che ho incotrato sono i putatori: anche se ho un ottimo libro sul quale studiare, volevo chiedervi di spegarmi alcune istruzioni:

    int *funzione();
    int (*variabile)();
    int **puntatore;

    che cosa fanno??

    la 1 dovrebbe creare un punatore che punta all'indirizzo di memoria nel quale presente il return di una funzione giusto??La 2??La 3 è un puntatore che punta all'indirizzo del puntatore "punatore", giusto??A che serve, praticamente, la 1 e la 3??

    grazie, ciao
    eXtending-Php.net coming soon ...

  2. #2
    allora non sono l'unico!!!
    anch'io ho aperto una discussione sui puntatori!!!
    cmq un puntatore è una variabile che va a fare riferimento ad un'altra variabile,cioè:

    int a,*p;
    a=10;
    p=&a;
    printf("%d\t%d",*p,a);
    vedrai che p è uguale a 10 ed a anche
    printf("%d\t%d",p,&a);
    vedrai che hanno la stessa locazione.
    ciao, Mercuzio

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    315
    cmq un puntatore è una variabile che va a fare riferimento ad un'altra variabile,cioè:
    Un puntatore e' una variabile che contiene un indirizzo di memoria, tale indirizzo deve essere l'indirizzo a partire dal quale e' memorizzato un dato.
    Tramite il puntatore, quindi, e' possibile fare riferimento a tale dato in maniera indiretta, cioe' non si utilizza una variabile per memorizzare il dato, ma si utilizza una variabile per memorizzarne la locazione.
    Per fare un esempio pratico pensa ad un double, poniamo che esso occupi 8 byte in memoria, tale double e' contenuto in una variabile dato.
    Supponi ora di creare un puntatore punta_dato, in cui metti l'indirizzo del double.
    Il risultato e' che dato e' una variabile che occupa 8 byte, a partire da un indirizzo X, e che contiene un numero in virgola mobile, mentre punta_dato e' una variabile che occupa 2 byte, e che contiene un numero esadecimale, cioe' l'indirizzo di dato. Chiaramente l'indirizzo di punta_dato e' diverso da quello di dato.

    int *funzione();
    int (*variabile)();
    int **puntatore;

    che cosa fanno??
    1) restituisce un puntatore a un numero intero. Questo vuol dire che in memoria viene scritto un numero intero, e la funzione restituisce una variabile che contiene l'indirizzo di tale intero.

    2) Questa e' una definizione di tipo, significa che variabile e' un puntatore a una funzione, la quale restituisce un intero.

    3) restituisce un puntatore a un puntatore: cioe' in memoria esiste un dato, esiste una variabile che contiene l'indirizzo di tale dato, e la funzione restituisce una variabile, che contiene l'indirizzo della variabile di cui sopra, contenente l'indirizzo del dato memorizzato.

    Gli utilizzi dei puntatori sono molto vasti, consentono una grande flessibilita' nella manipolazione dei dati, pero' bisogna fare molta attenzione quando li si usa perche' si possono rischiare bug difficili da trovare.

    So che l'argomento non e' semplice, spero di aver risposto a qualche dubbio.
    Ciao,
    Lorenzo

  4. #4
    ...Terrible warlords, good warlords, and an english song

  5. #5
    mi chiedevo: cosa cambia tra

    puntatore_dichiarato = variabile

    e

    puntatore_dichiarato = &variabile??
    eXtending-Php.net coming soon ...

  6. #6
    char *p, c = 'c', s[] = "stringa";

    // p punta all'indirizzo di memoria in cui risiede c

    p = &c;

    // p punta all'indirizzo di memoria in cui risiede il primo elemento
    // (o carattere) dell'array s

    p = &s[0]

    // ma per convenzione è meglio scriverlo nel seguente modo:

    p = s; // <-- equivale a p = &s[0];

    // quando un puntatore punta ad un array
    // non serve mettere l'operatore (indirizzo di) &
    ...Terrible warlords, good warlords, and an english song

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.