Мы наконец-то начинаем говорить про C++. Начать, разумеется, надо с базовых вещей, которые появились ещё в C. И вообще текущая тема может быть по праву названа как введением в C, так и введением в C++.

Однако C и C++ — это разные языки:

  1. Их разрабатывают разные люди с разными целями.
  2. Они имеют разные компиляторы, несмотря на то, что обычно компании, имеющие компиляторы C++ также имеют компилятор C. Эти компиляторы имеют общий код, но они всё же не одинаковы — этот самый общий код также используется и для Go, и для D, и для Ada... Исключением из этого правила является Clang, где просто if'ами различаются C и C++. Правда, там ещё и Objective-C и нечто ещё...
  3. Стили программирования на C и C++ кардинально отличаются, если вы пишете на них одинаково - вы дурачок.
  4. C не является подмножеством C++, случайная программа на C вообще не факт что будет корректна в C++. Правда, обычно придётся менять её не очень сильно. Примером такого отличия является код вида a ? b : c = 42. В C — это (a ? b : c) = 42, а в C++ — a ? b : (c = 42).

Целочисленные типы записываются так:

Размерзнаковыйбеззнаковый
shortshortunsigned short
(обычный)intunsigned
longlongunsigned long
long longlong longunsigned long long

Причем порядок записи не имеет значения: int signed, signed int, int - одно и то же.

Размер32 bitwin64linux64
char1 байт1 байт1 бай
short2 байта2 байта3 байта
int4 байта4 байта4 байта
long4 байта4 байта8 байт
long long8 байт8 байт8 байт

Ни в коем случае не надо рассуждать таким образом, что:

вот мне надо 4 байта - возьму int, а теперь мне надо 8 байт - возьму long.

Нужно использовать хедер cstdint

Он предоставляет типы:

  • int8_t, uint8_t
  • int16_t, uint16_t
  • int32_t, uint32_t
  • int64-t, uint

Какой тип использовать для индексации в массиве, поэтому мы пишем:

for(size_t   i = 0; i < 100; i++){
    do_something();
}

формально можно сказать, что у этой структурки только 5 полезных байт. В sizeof мы дополняем до 8

короч я ушел спать