PDA

Просмотр полной версии : [Вопрос] размеры массивов?



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


static globalArray[ARRAY_SIZE];
stock SetArray(array[ARRAY_SIZE]) {
globalArray = array;
}

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

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

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

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

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

tnc
22.06.2020, 19:15
Если я тебя правильно понял, то можно как-то так:


#if !defined MAX_ARRAY_SIZE
const MAX_ARRAY_SIZE = 10;
#endif

static g_array[MAX_ARRAY_SIZE];

stock SetArray(const arr[], const source_size = sizeof(arr), const max_size = MAX_ARRAY_SIZE)
{
if (source_size >= max_size)
{
return 0;
}
memcpy(g_array, arr, _, source_size * (cellbits / charbits));
return 1;
}


main()
{
new arr[11] = { 256, 512 };

new ret = SetArray(arr);

if (ret == 0)
{
printf("SetArray is ret 0 (source size (%d) >= max_size(%d)", sizeof(arr), MAX_ARRAY_SIZE);
return 0;
}
for (new i = 0; i < sizeof(g_array); i++)
{
printf("g_array: %d", g_array[i]);
}
}

MassonNN
22.06.2020, 21:02
Если я тебя правильно понял, то можно как-то так:


#if !defined MAX_ARRAY_SIZE
const MAX_ARRAY_SIZE = 10;
#endif

static g_array[MAX_ARRAY_SIZE];

stock SetArray(const arr[], const source_size = sizeof(arr), const max_size = MAX_ARRAY_SIZE)
{
if (source_size >= max_size)
{
return 0;
}
memcpy(g_array, arr, _, source_size * (cellbits / charbits));
return 1;
}


main()
{
new arr[11] = { 256, 512 };

new ret = SetArray(arr);

if (ret == 0)
{
printf("SetArray is ret 0 (source size (%d) >= max_size(%d)", sizeof(arr), MAX_ARRAY_SIZE);
return 0;
}
for (new i = 0; i < sizeof(g_array); i++)
{
printf("g_array: %d", g_array[i]);
}
}


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