Q:

Вопрос по массивам и выделению памяти

Привет всем!
Вопрос 1: Есть в методе такая строка:
const char *c = "123";

Как это присванивание работает? В стеке создается массив с '1','2','3', а затем указатель на массив копируется в "с"? Все верно, ничего не упустил?
Вопрос 2: Почему в следующем примере последние элементы заполняются нулями:
int b[5] = {7,-4,5};

Если массив объявлен как локальный\глобальный, то элементы [3] и [4] содержат нули. Почему? Ведь локальные переменные не должны инициализироваться нулями автоматически.

A:

В сегменте данных создается массив char с элементами '1','2','3',0 и указатель на него присваивается переменной c. Причем этот сегмент вполне может быть доступен только для чтения, так что изменить данные в нем будет невозможно.
Если есть хоть какая-то инициализация, то недостающие элементы также инициализируются - значением по умолчанию 0.

В C, например, проходит такое -
int array[] = { [0] = 2, [100] = -1 };

Будет массив из двойки, 99 нулей и 101-й элемент - -1 :)

