Ошибка sizeof и unsigned char char?(C / C ++) - PullRequest
1 голос
/ 12 февраля 2012

Я написал эту структуру:

struct bmpheader {
    unsigned char magic[2];
    unsigned int fsize;
    unsigned int unused;
    unsigned int pixdata_offset;
    unsigned int headersize;
    unsigned int width;
    unsigned int height;
    unsigned short planes_color;
    unsigned short bpp;
    unsigned int compression;
    unsigned int sizeofpix;
    unsigned int resolutionx;
    unsigned int resolutiony;
    unsigned int colors;
    unsigned int imp_colors;
};

И у меня проблема с функцией sizeof. Когда я рассчитываю на мои пальцы, это каждый раз 54 байта для меня. Функция sizeof дает мне каждый раз 56. Почему? Проблема с массивом без знака, когда я удаляю массив magic [2], sizeof равен 52? sizeof (header.magic) отображается как 2. Насколько я знаю, unsigned char имеет тип 1 байт?

Заранее спасибо за ответы.

Marcin

1 Ответ

1 голос
/ 12 февраля 2012

Поскольку int (на вашем компьютере) должен быть или более эффективен, когда размещен на 4-байтовом адресе. Компилятор вставит два байта заполнения после массива char.

...