Ты думаешь, что объявляя массив так:
у тебя первая ячейка из одного элемента состоит, а вторая из трёх?PHP код:
static const test[][] =
{
{1},
{2, 3, 4}
};
Твой массив в любом случае будет выглядеть так:
и при компиляции все незаполненные тобой ячейки инициализируются нулями.PHP код:
static const test[2][3] =
{
{1, 0, 0},
{2, 3, 4}
};
Я думаю, ты это знаешь, но не понимаю тогда с чего ты взял, что цикл на другую строку перейдёт
Последний раз редактировалось DeimoS; 26.01.2017 в 13:56.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Daniel_Cortez (24.01.2017)
Эмм, в чём заключается вопрос?
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
DeimoS (24.01.2017)
Ассемблерный листинг говорит об обратном:
С указанным размером:Код:DATA 0 ; 0 dump 8 8 1 2 3 4
Кстати, заметил, что мы можем получить доступ к следующей ячейке.Код:DATA 0 ; 0 dump 8 34 1 0 0 0 0 0 0 0 0 0 0 0 2 3 dump 4 0 0 0 0 0 0 0 0 0
UPD:PHP код:
static const test[][] =
{
{1},
{2, 3, 4}
};
main()
{
printf("%d", test[0][3]); // Выведет 4.
}
Оказалось, что возможно узнать размер вложенного массива.
Компилятор записывает смещения в сегмент данных.
Последний раз редактировалось VVWVV; 24.01.2017 в 20:53.
DeimoS (24.01.2017)
Этот баг ещё несколько лет тому назад обсуждали на оффе. Суть в том, что компилятор не генерирует проверку индексов при доступе к многомерным массивам. Через этот недочёт можно даже имитировать работу с указателями безо всяких #emit.
Касаемо смещений, можешь посмотреть их значение здесь, если интересно. Самому пришлось с ними разбираться полгода назад, т.к. они даже в Implementer's Guide не задокументированы - благо, хотя бы подсказали.
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Эту тему просматривают: 8 (пользователей: 0 , гостей: 8)