Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 4 из 4
  1. #1
    Аватар для punkochel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2018
    Адрес
    Россия
    Сообщений
    146
    Репутация:
    25 ±

    Адресация в pawn

    Не полезу в документацию, может тут кто подскажет, ибо не так срочно.
    Смотрите, объявим в функции два int-массива различных размеров и определим для них один обработчик, в нашем случае - цикл...
    1. new arr_1[10],
    2. arr_2[5];
    3. // взятие адреса в arr
    4. for(new i; i < sizeof(arr); i++)
    5. arr = -1;

    Можно ли как-то реализовать подобие Си (int *arr = arr_1)? Или придется для каждого массива создавать свой цикл?
    Не нужно писать о том что sizeof(arr) можно заменить переменной в которой будет результат ветвления, этот код не более чем пример.

    Можно ли в Pawn вообще хотяб маломальски работать с адресами, или только ассемблер?

    UPD:
    Проще говоря, можно ли в сделать чтобы две переменные указывали на один участок памяти? Возможно ли добавить подобный функционал в компилятор? Хотябы элементарное взятие и присвоение ссылок... подобное ведь уже реализовано в stock/public (array[], &value), при передаче не происходит копирования, а лишь передается адрес... Очень странно что работу с ссылками в функциях реализовали, а внутри блока нет, ну или я просто не знаю как это делается тут.
    Последний раз редактировалось punkochel; 19.11.2022 в 13:26.

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

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от punkochel Посмотреть сообщение
    подобное ведь уже реализовано в stock/public (array[], &value), при передаче не происходит копирования, а лишь передается адрес... Очень странно что работу с ссылками в функциях реализовали, а внутри блока нет, ну или я просто не знаю как это делается тут.
    Ничего странного. Передача аргументов по ссылке внутри функций сделана в первую очередь для того, чтобы не возвращать массивы, особенно если они большого размера. В случае с одиночными переменными в этом тоже есть удобство, если функция должна выдать несколько значений подряд (какие-нибудь координаты, например) и возвращать их в виде массива опять же не хочется.

    Касаемо самого вопроса, ответ вполне очевиден: стандартных средств для этого нет.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  3. Пользователь сказал cпасибо:
    punkochel (20.11.2022)
  4. #3
    Аватар для punkochel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2018
    Адрес
    Россия
    Сообщений
    146
    Репутация:
    25 ±
    Все-же я считаю странным что создавая pawn на базе Си и не добавив туда операции работы с адресами внутри блока. Да, у нас нет типизации, но можно было добавить что-то вроде меток, как Float: или bool:. Мы же тут можем присваивать массивы одинакового размера друг другу (arr = arr2), но через копирование. Сделали бы что-то вроде Pointer:
    1. new Pointer:ptr,
    2. arr[100],
    3. var;
    4. ptr = arr;
    5. ptr = &var;

    А копирование массива оставили бы для явного использования, ибо очень редко такое будет возникать имея бы мы в своем арсенале Pointer:, ну или обрабатывать ситуацию того что если присвоение массива идет к переменной с меткой Pointer: то лишь передать адрес или ссылку, иначе простое копирование через move.
    Самое интересное опять же, что передачу ссылки в функцию придумали дабы избежать копирования, а внутри блока копирование не страшно?

  5. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от punkochel Посмотреть сообщение
    Все-же я считаю странным что создавая pawn на базе Си и не добавив туда операции работы с адресами внутри блока.
    Язык в первую очередь создан для новичков, и весь неочевидный и небезопасный функционал попал под нож, указатели - в том числе (именно вместо них и были добавлены ссылки, как в C++, но только для аргументов функций).
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. Пользователь сказал cпасибо:
    punkochel (22.11.2022)
 

 

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

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

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

Ваши права

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