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

233
04 апреля 2017, 12:31

Привет всем!

Вопрос 1: Есть в методе такая строка:

const char *c = "123";

Как это присванивание работает? В стеке создается массив с '1','2','3', а затем указатель на массив копируется в "с"? Все верно, ничего не упустил?

Вопрос 2: Почему в следующем примере последние элементы заполняются нулями:

int b[5] = {7,-4,5};

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

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

  2. Если есть хоть какая-то инициализация, то недостающие элементы также инициализируются - значением по умолчанию 0.

В C, например, проходит такое -

int array[] = { [0] = 2, [100] = -1 };

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

READ ALSO
Поиск элемента в QSqlTableModel

Поиск элемента в QSqlTableModel

Есть QSqlTableModel, связанная с таблицей в базе данныхНужно найти элемент(получить его индекс), находящийся в столбце "column" и для которого значение...

200
Решение олимпиадной задачи подсуммы

Решение олимпиадной задачи подсуммы

Вообщем есть последовательность чисел

267
Браузер не обрабатывает событие

Браузер не обрабатывает событие

ЗдравствуйтеСтолкнулся со следующей проблемой

323