Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19
  1. #11
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quote Originariamente inviata da gaten Visualizza il messaggio
    con (*A)+i) , cosa stò dicendo precisamente?
    Con

    (int *)(*A)

    dici

    A[ ]

    e con +i

    A[i]
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  2. #12
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Con

    (int *)(*A)

    dici

    A[ ]

    e con +i

    A[i]
    oregon, quello che dici tu non dovrebbe essere:
    codice:
    (*A)+i => A[0] + i
    mentre
    codice:
    *(A+i) => A[i]
    Con i sogni possiamo conoscere il futuro...

  3. #13
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Tieni presente che A è un doppio puntatore ...

    A[0] + i

    non ha senso perché sommi un intero ad un puntatore.

    L'altra puoi scriverla nei due modi

    *((int *)*(A+i))
    *(((int *)(*A)+i))
    Ultima modifica di oregon; 12-04-2016 a 14:57
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #14
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Tieni presente che A è un doppio puntatore e che non ha senso ragionare con i puntatori void, alla fine devi sempre sapere che tipo di dato punti.
    Si , e qui ci siamo... stò cercando di immaginare uno schema per rappresentare il tutto.

    **A = |void*|void*|void*|void*|void*|
    dall'esempio, ogni elemento di A, contiene un indirizzo di memoria che punta ad un intero, per cui, effettuerò un cast in int*.
    Ora mi domandavo:

    (*A)+i

    i incrementa da 0 a 4 ... *A può essere tradotto in A[0], cioè il primo elemento dell'array(che è un indirizzo).
    Facendo (*A)+0,(*A)+1,(*A)+2,(*A)+3,(*A)+4 ...

    per cui (*A)+0 => restituisce il primo indirizzo presente nell'array (void* che conterrà l'indirizzo &B[0] del primo intero..)
    (*A)+1 => il secondo indirizzo dell'array..
    e cosi vià...

    Credo che ora mi è tutto chiaro
    Con i sogni possiamo conoscere il futuro...

  5. #15
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Tieni presente che A è un doppio puntatore ...

    A[0] + i

    non ha senso perché sommi un intero ad un puntatore.
    ma pure qui sommi un intero ad un puntatore... no? (*A)+i ... stò sommando un intero ad un indirizzo...
    Con i sogni possiamo conoscere il futuro...

  6. #16
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quote Originariamente inviata da gaten Visualizza il messaggio
    ma pure qui sommi un intero ad un puntatore... no? (*A)+i ... stò sommando un intero ad un indirizzo...
    Sì, ma intendevo che non puoi con un puntatore void ... solo quando A[0] assume un puntatore di un certo tipo allora è possibile sommare i


    Con i puntatori, prova con un disegno ...
    Ultima modifica di oregon; 12-04-2016 a 15:02
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #17
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Sì, ma intendevo che non puoi con un puntatore void ... solo quando A[0] assume un puntatore di un certo tipo allora è possibile sommare i


    Con i puntatori, prova con un disegno ...
    sono assolutamente d'accordo... ma non a caso , gli elementi di A assumono tutti indirizzi che puntano a interi...(l'avevo dato per scontato)... volevo solo capire se il ragionamento che ho scritto sopra era corretto...


    **A = |void*|void*|void*|void*|void*|
    dall'esempio, ogni elemento di A, contiene un indirizzo di memoria che punta ad un intero, per cui, effettuerò un cast in int*.
    Ora mi domandavo:

    (*A)+i

    i incrementa da 0 a 4 ... *A può essere tradotto in A[0], cioè il primo elemento dell'array(che è un indirizzo).
    Facendo (*A)+0,(*A)+1,(*A)+2,(*A)+3,(*A)+4 ...

    per cui (*A)+0 => restituisce il primo indirizzo presente nell'array (void* che conterrà l'indirizzo &B[0] del primo intero..)
    (*A)+1 => il secondo indirizzo dell'array..
    e cosi vià...
    Con i sogni possiamo conoscere il futuro...

  8. #18
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    In definitiva, senza dubbio, questo è il modo più chiaro:

    codice:
    printf("A[%d] = %d\n",i, *(((int *)*(A+i))));
    Qui capisco palesemente che scorro gli elementi di A (che sono dei void* contenente degli indirizzi), per poi effettuare il cast.
    Con i sogni possiamo conoscere il futuro...

  9. #19
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Oregon, aggiungo:

    l'inizializzazione del puntatore doppio, compila ed è funzionante anche in questo modo:

    codice:
    	void **A = malloc(sizeof(void*)*5);
    	/*for(int i=0; i<5; i++){
    		A[i] = (void*)malloc(sizeof(void*));
    	}*/
    senza usare il for per allocare i singoli elementi...
    Con i sogni possiamo conoscere il futuro...

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