2014-01-15 3 views
2

Привет я имею 2 вопросы здесьстатический буфер и не инициализировать статический буфер

  1. Как хранить шестнадцатеричное значение в буфере, скажем, например, 0x0A и 0x1F;

    char buffer[2] = "0x0a 0x1F"; 
    

    Но это неправильный метод. Он дает размер 10 вместо 2. Может ли кто-нибудь предложить, как я могу продолжить.

  2. Я видел массив как этот

    char buffer[] = " static array"; 
    

    В структуре также,

    struct Point { 
        char x[]; 
        char y[]; 
    }; 
    

    что это значит? сколько размера потребуется для компиляции

+1

'char buffer [2] =" \ x0a \ x1F ";' – BLUEPIXY

+0

@BLUEPIXY Вы имели в виду 'buffer [3 ] '? –

+0

@Andreas' buffer [2] 'mean' buffer [2] ' – BLUEPIXY

ответ

5

Для первого, если вы действительно хотите, массив из двух байт, а не три-байтовой строки (включая NULL терминатор), вы можете использовать:

char buffer[] = {0x0a, 0x1f}; 

для второй, самый простой способ узнать это просто проверить:

sizeof(buffer) 

или:

sizeof(struct Point) 

хотя я уверен, что ваше определение структуры не сработает, потому что char x[] не является полным типом. Текущие версии стандарта позволяют гибкие размеры массива на конце структур, но не так, как у вас есть.

Возможные размеры двух (один раз вы объявляете struct Point с char x[5]) будет 14 (количество символов в " static array" включая терминатора NULL) и 5 ​​(размер самого x (гибкие элементы массива, как правило, не занимают много места, они больше подходят для разрешения произвольного дополнительного пространства, если блок памяти получается, например, malloc).

Смежные вопросы