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

    Статус
    Оффлайн
    Регистрация
    16.03.2018
    Адрес
    Москва
    Сообщений
    129
    Репутация:
    6 ±

    размеры массивов?

    В общем, идея такова, я хочу сделать функцию, которая в качестве аргумента будет принимать массив, значения из которого будут присвоены к другому массиву:

    1. static globalArray[ARRAY_SIZE];
    2. stock SetArray(array[ARRAY_SIZE]) {
    3. globalArray = array;
    4. }


    В таком случае, при использовании этой функции, мне нужно будет делать что-то вроде этого:

    1. new array1[ARRAY_SIZE] = {10, 121, 13021, 12033102, ...};
    2. SetArray(array1);


    Что мне не по душе. Я бы хотел как-то сделать, чтобы массив, который я передаю в качестве аргумента был произвольной длины (но не более ARRAY_SIZE), а остальные неиспользуемые элементы глобального массива никак не трогались:

    1. new array1[] = {10, 121, 13021, 12033102};
    2. SetArray(array1);


    Можно конечно попробовать сделать что-то вроде цикла, который будет догонять размеры нулями, но я пришел сюда, чтобы узнать есть ли какой-то более адекватный способ.

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

    Статус
    Оффлайн
    Регистрация
    01.09.2019
    Сообщений
    121
    Репутация:
    26 ±
    Если я тебя правильно понял, то можно как-то так:

    1. #if !defined MAX_ARRAY_SIZE
    2. const MAX_ARRAY_SIZE = 10;
    3. #endif
    4.  
    5. static g_array[MAX_ARRAY_SIZE];
    6.  
    7. stock SetArray(const arr[], const source_size = sizeof(arr), const max_size = MAX_ARRAY_SIZE)
    8. {
    9. if (source_size >= max_size)
    10. {
    11. return 0;
    12. }
    13. memcpy(g_array, arr, _, source_size * (cellbits / charbits));
    14. return 1;
    15. }
    16.  
    17.  
    18. main()
    19. {
    20. new arr[11] = { 256, 512 };
    21.  
    22. new ret = SetArray(arr);
    23.  
    24. if (ret == 0)
    25. {
    26. printf("SetArray is ret 0 (source size (%d) >= max_size(%d)", sizeof(arr), MAX_ARRAY_SIZE);
    27. return 0;
    28. }
    29. for (new i = 0; i < sizeof(g_array); i++)
    30. {
    31. printf("g_array: %d", g_array[i]);
    32. }
    33. }

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

    Статус
    Оффлайн
    Регистрация
    16.03.2018
    Адрес
    Москва
    Сообщений
    129
    Репутация:
    6 ±
    Цитата Сообщение от tnc Посмотреть сообщение
    Если я тебя правильно понял, то можно как-то так:

    1. #if !defined MAX_ARRAY_SIZE
    2. const MAX_ARRAY_SIZE = 10;
    3. #endif
    4.  
    5. static g_array[MAX_ARRAY_SIZE];
    6.  
    7. stock SetArray(const arr[], const source_size = sizeof(arr), const max_size = MAX_ARRAY_SIZE)
    8. {
    9. if (source_size >= max_size)
    10. {
    11. return 0;
    12. }
    13. memcpy(g_array, arr, _, source_size * (cellbits / charbits));
    14. return 1;
    15. }
    16.  
    17.  
    18. main()
    19. {
    20. new arr[11] = { 256, 512 };
    21.  
    22. new ret = SetArray(arr);
    23.  
    24. if (ret == 0)
    25. {
    26. printf("SetArray is ret 0 (source size (%d) >= max_size(%d)", sizeof(arr), MAX_ARRAY_SIZE);
    27. return 0;
    28. }
    29. for (new i = 0; i < sizeof(g_array); i++)
    30. {
    31. printf("g_array: %d", g_array[i]);
    32. }
    33. }
    В общем проверил работоспособность, да, рабочий способ, спасибо.

 

 

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

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

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

Ваши права

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