Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C] Union ?

  1. #1

    [C] Union ?

    Un Dubbio...
    se ho una union di questo tipo...
    codice:
    typedef union {
        char stringa[10];
        int num;
    } miaUnion;
    Come faccio a sapere se in un certo punto sto' usando stringa o num ? Ne posso usare solo uno alla volta... giusto ?
    Devo tenermi in flag...

  2. #2
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219
    eh?

    union prova;
    codice:
      
    typedef tipoProva{      
     char stringa[10];      
     int num;  } prova;
    
    prova.stringa[1]='c';
    prova.num=2;

  3. #3
    ok... io riempio una lista di tipo miaUnion.
    L'ho riempita a caso... non so' come...
    devo andare a rileggere la lista...
    come faccio a sapere se quello che devo leggere e' la stringa o il num ?

  4. #4
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219
    Una lista o un array? Prova a postare il codice... :master:

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Mi sa che non ti è del tutto chiaro che cosa sia una union.
    Una union è una struttura dati che permette a 2 o più variabili di condividere una porzione della memoria: quanta memoria occupa una union? Essa occupa il minimo spazio necessario a contenere il tipo di dato più grande. Nell'esempio che hai postato tu, quindi, hai una union che occupa esattamente 10 byte (considerando un char da 1 byte), in quanto hai un dato che occupa 10 byte (l'array di char) e un secondo dato che ne occupa 4 (o 2 dipende dal compilatore).
    Graficamente, quindi, hai questa situazione (considero che un int occupi 4 byte):
    codice:
    |------------- stringa[10] -------------|
    -----------------------------------------
    | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
    -----------------------------------------
    |----- num -----|
    Supponiamo, ora che tu voglia memorizzare nella union, la seguente stringa: "Topolinia!"...
    codice:
    strcpy(miaUnion.stringa, "Topolinia");
    Cosa succede, in memoria?
    codice:
    |------------- stringa[10] --------------|
    ------------------------------------------
    | T | o | p | o | l | i | n | i | a | \0 |
    ------------------------------------------
    |----- num -----|
    Ora, proviamo a stampare il contenuto di num: la variabile num, che condivide la stessa memoria della variabile stringa, conterrà, pertanto, i caratteri "Topo", che in valore numerico, corrispondono a 1869639508.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.