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

    [C] Problema sizeof([puntatore a struttura])

    Ciao ragazzi,
    sto cercando di imparare ad utilizzare il linguaggio C, xò facendo alcune prove ho dei dubbi ke nn riesco a togliermi..ho provato a scrivere questo codice:

    struct p
    {
    char nome[5];
    int cr;
    };


    int main(void)
    {
    struct pp prova, p_prova;

    printf("%d %d", sizeof(prova), sizeof(p_prova));

    return 0;

    }


    Quando lo eseguo mi da il seguente risultato: 12 [che sarebbero i byte di 'prova'] e 4 [i byte di 'p_prova']..
    ..a questo punto mi trovo di fronte ad un problema concettuale:

    2->perché la sizeof(p_prova) restituisce 4?..in questo caso pensavo restituisse 1..cioè la dimensione del primo byte in cui è contenuto l'indirizzo della struttura..

    ..Vi ringrazio anticipatamente se mi potete aiutare a chiarire questi dubbi..ciao ciao

  2. #2
    Aspetta, nel codice che hai postato non c'è nessun puntatore, sicuro di averlo postato correttamente?
    P.S.: comunque sizeof sui puntatori restituisce sempre 4 perché è questa la dimensione degli indirizzi (sui processori x86) (32 bit = 4 byte).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [C] Problema sizeof([puntatore a struttura])

    Originariamente inviato da M4tRiX83
    Quando lo eseguo mi da il seguente risultato: 12 [che sarebbero i byte di 'prova'] e 4 [i byte di 'p_prova']..
    ..a questo punto mi trovo di fronte ad un problema concettuale:

    2->perché la sizeof(p_prova) restituisce 4?..in questo caso pensavo restituisse 1..cioè la dimensione del primo byte in cui è contenuto l'indirizzo della struttura..
    A parte il fatto che nel post hai scritto prima 'p' e poi 'pp' comunque, trascrizioni a parte, il codice dovrebbe stampare 12 per entrambe le sizeof. Nota che nella struttura ci sono dei byte di padding tra 'nome' e 'cr'. Per defaul c'è l'allineamento a 32 bit dei campi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Per il byte padding andare qui.


    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.