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

    Utilizzare un array di puntatori a strutture

    Ciao a tutti, mi servirebbe una struttura dati di questo tipo

    - un array di 20 elementi
    - ogni elemento è un puntatore ad una struttura

    Nel mio caso ho una lista di giocatori, stavo pensando di implementarla così:

    Codice PHP:
    struct persona {
        
    int eta;
        
    int peso;
    };

    struct persona persone[20]; // va bene così? 
    ho fatto un programma di esempio, che aggiunge 2 persone:

    Codice PHP:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>

    int main() {
        
    struct persona {
            
    int eta;
            
    int peso;
        };

        
    struct persona persone[20]; // va bene così?
        
    int i;
        for (
    i=0i<20i++)
            
    persone[i] = NULL;

        
    // allocazione dinamica di una persona
        
    struct s p;
        *
    malloc(sizeof(struct s));
        *
    p.eta=20;
        *
    p.peso=65;
        
    persone[5] = p// così il 5° elemento dell'array punta alla persona creata

        // stessa cosa ma aggiungo una nuova persona all'8° elemento
        
    *malloc(sizeof(struct s));
        *
    p.eta=50;
        *
    p.peso=75;
        
    persone[8] = p;

        
    // stampa della lista delle persone
        
    for (i=0i<20i++)
            if (
    persone[i] == NULL)
                
    printf("%2d\n"i);
            else
                
    printf("%2d: eta=%d, peso=%d\n"ipersone[i].eta,  persone[i].peso);

        return 
    0;

    Il compilatore (gcc) mi dà tutti questi errori:

    prova.c: In function 'main':
    prova.c:22: error: incompatible types in assignment
    prova.c:23: error: request for member 'eta' in something not a structure or union
    prova.c:24: error: request for member 'peso' in something not a structure or union
    prova.c:27: error: incompatible types in assignment
    prova.c:28: error: request for member 'eta' in something not a structure or union
    prova.c:29: error: request for member 'peso' in something not a structure or union
    prova.c:36: error: request for member 'eta' in something not a structure or union
    prova.c:36: error: request for member 'peso' in something not a structure or union
    dove ho sbagliato?

  2. #2
    codice:
        struct persona * p; 
        *p = malloc(sizeof(*p));
    Tra puoi anche evitare di dichiarare p lavorando direttamente sull'array:
    codice:
        persone[5] = malloc(sizeof(struct persona);
        persone[5]->eta=20;
        persone[5]->peso=65;
    .
    P.S.: manca il linguaggio nel titolo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Originariamente inviato da MItaly
    codice:
        struct persona * p; 
        *p = malloc(sizeof(*p));
    Tra puoi anche evitare di dichiarare p lavorando direttamente sull'array:
    codice:
        persone[5] = malloc(sizeof(struct persona);
        persone[5]->eta=20;
        persone[5]->peso=65;
    .
    P.S.: manca il linguaggio nel titolo.
    non ci avevo pensato!

    ma qual'è l'errore del mio codice?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    ma qual'è l'errore del mio codice?
    Ma la struttura s cosa e' e da dove viene?

    struct s * p;

    ???

    La struttura l'hai chiamata

    struct persona

    mi pare ...

    E MItaly ti ha mostrato cosa dovevi scrivere ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Usavi

    struct s * p;

    ma la struttura 's' non era dichiarata.

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    
    struct persona
    {
    	int eta;
    	int peso;
    };
    
    int main()
    {
    	struct persona *p, *persone[20];
    	int i;
    
    	for (i=0; i<20; i++)
    		persone[i] = NULL;
    
    	// allocazione dinamica di una persona
    	p = (struct persona*)malloc(sizeof(struct persona));
    	p->eta=20;
    	p->peso=65;
    	persone[5] = p; // così il 5° elemento dell'array punta alla persona creata
    
    	// stessa cosa ma aggiungo una nuova persona all'8° elemento
    	p = (struct persona*)malloc(sizeof(struct persona));
    	p->eta=50;
    	p->peso=75;
    	persone[8] = p;
    
    	// stampa della lista delle persone
    	for (i=0; i<20; i++)
    		if (persone[i] == NULL)
    			printf("%2d : NULL\n", i);
    		else
    			printf("%2d : eta=%d, peso=%d\n", i, persone[i]->eta,  persone[i]->peso);
    
    	return 0;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  6. #6
    E se uno avesse bisogno di 10 persone in + come fa ad "aggiungere" altre persone?

    Persone=(struct Persona *)realloc(persone,sizeof(Persona)*30);

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da kyoboom
    E se uno avesse bisogno di 10 persone in + come fa ad "aggiungere" altre persone?

    Persone=(struct Persona *)realloc(persone,sizeof(Persona)*30);
    Non risollevare discussioni vecchie di anni per porre una nuova domanda.
    Apri una discussione separata, come da Regolamento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.