Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 71 из 133 ПерваяПервая ... 21 61 69 70 71 72 73 81 121 ... ПоследняяПоследняя
Показано с 701 по 710 из 1325
  1. #701
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    Каким способом узнать количество элементов во второй строке?
    PHP код:
    static const test[][] = 

       {
    1}, 
       {
    234}
    }; 
    Вряд ли это как-то возможно сделать, если только добавить возможность в самом компиляторе. Но вы можете использовать sizeof, но для него необходимо указать размер внутреннего массива, ибо будет всегда нуль.

    Если в строке, то используй функцию strlen.

  2. #702
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Вряд ли это как-то возможно сделать, если только добавить возможность в самом компиляторе. Но вы можете использовать sizeof, но для него необходимо указать размер внутреннего массива, ибо будет всегда нуль.

    Если в строке, то используй функцию strlen.
    Тогда выход в первую строку добавить добавить еще два элемента со значением 0 и останавливать цикл при этом значении.

  3. #703
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    Тогда выход в первую строку добавить добавить еще два элемента со значением 0 и останавливать цикл при этом значении.
    Добавлять ничего не нужно, компилятор всё сделает сам.

  4. #704
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Добавлять ничего не нужно, компилятор всё сделает сам.
    Тогда цикл перейдет на следующую строку

  5. #705
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    Тогда цикл перейдет на следующую строку
    Ты думаешь, что объявляя массив так:
    PHP код:
    static const test[][] = 

       {
    1}, 
       {
    234}
    }; 
    у тебя первая ячейка из одного элемента состоит, а вторая из трёх?

    Твой массив в любом случае будет выглядеть так:
    PHP код:
    static const test[2][3] = 

       {
    100}, 
       {
    234}
    }; 
    и при компиляции все незаполненные тобой ячейки инициализируются нулями.

    Я думаю, ты это знаешь, но не понимаю тогда с чего ты взял, что цикл на другую строку перейдёт
    Последний раз редактировалось DeimoS; 26.01.2017 в 13:56.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  6. Пользователь сказал cпасибо:
    Daniel_Cortez (24.01.2017)
  7. #706
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ты думаешь, что объявляя массив так:
    PHP код:
    static const test[][] = 

       {
    1}, 
       {
    234}
    }; 
    у тебя первая ячейка из 1 элемента состоит, а вторая из трёх?

    Твой массив в любом случае будет выглядеть так:
    PHP код:
    static const test[2][3] = 

       {
    100}, 
       {
    234}
    }; 
    и при компиляции все незаполненные тобой ячейки инициализируются нулями
    А если сделать так?
    PHP код:
    static const index[] =
    {
        
    213413
    };

    for (new 
    0index[caliber_t-1]; ji++) {} 

  8. #707
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Эмм, в чём заключается вопрос?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #708
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Эмм, в чём заключается вопрос?
    PHP код:
    static const test[][] = 

       {
    1}, 
       {
    234}
    }; 
    Если цикл выполнит условие 3 раза, то выведет число не только с первой строки.

  10. Пользователь сказал cпасибо:
    DeimoS (24.01.2017)
  11. #709
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ты думаешь, что объявляя массив так:
    PHP код:
    static const test[][] = 

       {
    1}, 
       {
    234}
    }; 
    у тебя первая ячейка из одного элемента состоит, а вторая из трёх?
    Ассемблерный листинг говорит об обратном:
    Код:
    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
    Кстати, заметил, что мы можем получить доступ к следующей ячейке.

    PHP код:
    static const test[][] =  
    {  
       {
    1},  
       {
    234
    };  

    main()
    {
        
    printf("%d"test[0][3]); // Выведет 4.

    UPD:
    Оказалось, что возможно узнать размер вложенного массива.

    Компилятор записывает смещения в сегмент данных.
    Последний раз редактировалось VVWVV; 24.01.2017 в 20:53.

  12. Пользователь сказал cпасибо:
    DeimoS (24.01.2017)
  13. #710
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Кстати, заметил, что мы можем получить доступ к следующей ячейке.

    PHP код:
    static const test[][] =  
    {  
       {
    1},  
       {
    234
    };  

    main()
    {
        
    printf("%d"test[0][3]); // Выведет 4.

    UPD:
    Оказалось, что возможно узнать размер вложенного массива.

    Компилятор записывает смещения в сегмент данных.
    Этот баг ещё несколько лет тому назад обсуждали на оффе. Суть в том, что компилятор не генерирует проверку индексов при доступе к многомерным массивам. Через этот недочёт можно даже имитировать работу с указателями безо всяких #emit.

    Касаемо смещений, можешь посмотреть их значение здесь, если интересно. Самому пришлось с ними разбираться полгода назад, т.к. они даже в Implementer's Guide не задокументированы - благо, хотя бы подсказали.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

 

 
Страница 71 из 133 ПерваяПервая ... 21 61 69 70 71 72 73 81 121 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •