Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di Linusss
    Registrato dal
    Sep 2002
    Messaggi
    405

    [C]Chiarimento codice

    A volte vedo scritto **v (al posto di v c'è qualunque lettera o parola) cosa significa?
    Io so che *v è un puntatore ma **v cos'è?
    Grazie e scusate per la banalità della domanda.

  2. #2
    è molto che non sviluppo in c... ma mi sembre di ricordare che il doppio star davanti ad una varibile **a, sta a significare che è un puntatore al puntatore di a. In sostanza doppio puntatore ad a



  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Esatto.

    Puntatore a puntatore a ...

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Ma questa struttura può essere ricorsiva?
    *****a

    Puntatore al puntatore al puntatore al puntatore di a?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non si parla in questo caso di ricorsivita' ... non c'entra ...

    Sì ... puoi scrivere un puntatore a puntatore a puntatore ... ma dopo un certo livello (il secondo o il terzo) non ha piu' utilità pratica ...

  6. #6
    Utente di HTML.it L'avatar di Linusss
    Registrato dal
    Sep 2002
    Messaggi
    405
    Grazie mille raga

  7. #7
    Utente di HTML.it L'avatar di Linusss
    Registrato dal
    Sep 2002
    Messaggi
    405
    Altro dubbio sempre sui puntatori.
    Allora se ho una funziona così dichiarata:

    void funzione(int **v, int *dim)

    e dal main la chiamo così:

    funzione(&v, &dim);

    cosa significa? che gli ho passato la locazione di memoria a cui puntano v e dim?
    ma se v e dim sono due puntatori nn bastava scrivere

    funzione(v, dim); per passare la locazione?

    Oppure v e dim sono le locazioni di memoria a cui puntano e invece &v e &dim sono le locazioni di memoria dei puntatori stessi?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma come sono dichiarati nel programma v e dim ?

    Perche', secondo come sono dichiarati, la risposta cambia ...

  9. #9
    Utente di HTML.it L'avatar di Linusss
    Registrato dal
    Sep 2002
    Messaggi
    405
    Allora ti allego il codice:

    #include <stdio.h>
    #include <stdlib.h>
    main()
    {
    int *pv;
    int pnum;
    creaVett(&pv, &pnum);
    }

    void creaVett(int** pv, int* pnum)
    {
    int i;
    printf("Quanti valori? ");
    scanf("%d", pnum);
    *pv = (int*) malloc(*pnum * sizeof(int));
    for (i=0; i< *pnum; i++){
    printf("v[%d] = ", i);scanf("%d", *pv+i);
    }

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Linusss
    Allora ti allego il codice:

    #include <stdio.h>
    #include <stdlib.h>
    main()
    {
    int *pv;
    int pnum;
    creaVett(&pv, &pnum);
    }

    void creaVett(int** pv, int* pnum)
    {
    int i;
    printf("Quanti valori? ");
    scanf("%d", pnum);
    *pv = (int*) malloc(*pnum * sizeof(int));
    for (i=0; i< *pnum; i++){
    printf("v[%d] = ", i);scanf("%d", *pv+i);
    }
    In questo caso, i passaggi sono corretti.

    Quindi ...

    cosa significa? che gli ho passato la locazione di memoria a cui puntano v e dim?
    significa che stai passando le locazioni di memoria a cui punta il puntatore pv e la locazione di memoria della variabile pnum.

    ma se v e dim sono due puntatori nn bastava scrivere

    funzione(v, dim); per passare la locazione?
    Attenzione, stai facendo un errore grave. Stai confondendo i parametri formali con quelli attuali.

    v e dim indicano solamente al compilatore che funzione accettera' due puntatori come parametri (parametri formali).

    Il secondo parametro non puo' essere pnum perche' pnum non e' un puntatore ma un intero. Devi quindi passare il puntatore all'intero tramite &pnum. In questo modo la scanf potra' operare con l'indirizzo di pnum.

    Il primo parametro deve essere un puntatore a puntatore perche' deve essere utilizzato dalla malloc (che restituisce un valore da scrivere in un puntatore). Ma questa non potrebbe scrivere in un puntatore se non ne conosce l'indirizzo e quindi si rende necessario il fatto che il primo parametro sia un puntatore ad un puntatore.

    E la chiamata deve prevedere il fatto di usare il puntatore ad un puntatore. Il puntatore pv ce l'hai e per passarne l'indirizzo devi scrivere &pv.

    So che puo' apparire un discorso contorto e difficile da capire ...
    ma ti abituerai ...

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.