Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    [C] Array di puntatori a void

    Salve ragazzi,

    io ho un array di puntatori a void, di questo tipo:

    codice:
    int i;
    void **A = malloc(sizeof(void*)*5);
    int *B = (int*)malloc(sizeof(int)*5);
    for(i=0; i<5; i++){
      B[i] = i;
    }
    
    for(i=0; i<5; i++){
      A[i] = &B[i]; 
    }
    
    for(i=0; i<5; i++){
      // qui dovrei scorrere l'array A di puntatori a void
      // TO DO
    }
    Con i sogni possiamo conoscere il futuro...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    codice:
    printf("%d\n", *((int *)A[i]));
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Rettifico:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main(){
    	int i;
    	// array di puntatori a void*
    	// init:
    	void **A = (void**)malloc(sizeof(void*)*5);
    	for(int i=0; i<5; i++){
    		A[i] = (void*)malloc(sizeof(void*));
    	}
    	// end init
    	
    	// array di interi
    	int *B = (int*)malloc(sizeof(int)*5);
    	for(i=0; i<5; i++){
    	  B[i] = i;
    	}
    
    
    	// A = {&B[0],&B[1],&B[2],&B[3],&B[4]}
    	for(i=0; i<5; i++){
    	  A[i] = &B[i];
    	}
    
    
    	// scorro l'array di puntatori a void*
    	for(i=0; i<5; i++){
    	  printf("\n%d", *((int*)A[i]));
    	}
    }
    Era errata l'allocazione dinamica dell'array di puntatori a void.

    Ciao!
    Con i sogni possiamo conoscere il futuro...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quella l'avevo corretta altrimenti non compilava neanche. Ma la risposta l'hai compresa?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Quella l'avevo corretta altrimenti non compilava neanche. Ma la risposta l'hai compresa?
    Si grazie mille, l'ho compresa.
    Con i sogni possiamo conoscere il futuro...

  6. #6
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    oregon, ho cambiato il mio esempio, in questo modo:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    void stampa(void *A);
    
    
    int main(){
    	int i;
    	// array di puntatori a void*
    	// init:
    	void **A = (void**)malloc(sizeof(void*)*5);
    	for(int i=0; i<5; i++){
    		A[i] = (void*)malloc(sizeof(void*));
    	}
    	// end init
    	
    	// array di interi
    	int *B = (int*)malloc(sizeof(int)*5);
    	for(i=0; i<5; i++){
    	  B[i] = i;
    	}
    	
    	printf("indirizzo A in main: %x\n",A);
    	// A = {&B[0],&B[1],&B[2],&B[3],&B[4]}
    	for(i=0; i<5; i++){
    	  A[i] = &B[i];
    	  printf("B[%d] - %x\n", i, &B[i]);
    	  printf("A[%d] - %x\n", i, A[i]);
    	  printf("VAL A[%d] - %d\n", i, *((int*)A[i]));
    	}
    	stampa(A);
    }
    
    
    void stampa(void *A){
    	printf("indirizzo A in stampa: %x",A);
    	// scorro l'array di puntatori a void*
    	for(int i=0; i<5; i++){
    		// qui devo stampare i valori puntati dai void*
    	}
    }
    Sia nel main, che in stampa, ho lo stesso indirizzo, per cui la matrice la passo correttamente. Per� se stampo in questo modo:

    codice:
    printf("A[%d] = &d",i,*((int*)(A+i)));
    mi stampa valori a cavolo...per cui, come effettuo la stampa nella funzione "stampa"?
    Con i sogni possiamo conoscere il futuro...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma cosa è

    &d



    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Ma cosa è

    &d



    ho sostituito con % , è stato un mio errore di battitura, ma continuo ad avere il problema.
    Con i sogni possiamo conoscere il futuro...

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da gaten Visualizza il messaggio
    ho sostituito con % , è stato un mio errore di battitura, ma continuo ad avere il problema.
    Ovviamente ...

    A è un puntatore doppio

    void **A

    quindi deve essere

    void stampa(void **A)
    e dunque

    printf("A[%d] = %d\n",i, *(((int *)(*A)+i)) );
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    con (*A)+i) , cosa stò dicendo precisamente?
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.