Я пытаюсь выполнить итерацию по массиву, который будет содержать до максимум 4 элемента - никаких других знаний о длине массива не существует.Итерация через int массив неизвестной длины
псевдокоде
void insert_vals(uint8_t num, uint8_t *match_num, uint8_t *value)
{
uint8_t i;
while(data_exists) // how do I determine if data exists in 'value'?
{
switch(num)
{
case 0:
{
switch(match_num[i])
{
case 0:
hw0reg0 = value[i];
case 1:
hw0reg1 = value[i];
case 2:
hw0reg2 = value[i];
case 3:
hw0reg3 = value[i];
}
}
case 1:
{
switch(match_num[i])
{
case 0:
hw1reg0 = value[i];
case 1:
hw1reg1 = value[i];
case 2:
hw1reg2 = value[i];
case 3:
hw1reg3 = value[i];
}
}
// etc. 2 other cases
}
i++;
}
}
Вызов Пример (псевдокод)
/*
* num: hardware device select from 1 - 4
* match_num: 4 possible matches for each hardware device
* value: 32-bit values to be assigned to 4 possible matches
* NOTE: This function assumes hardware devices are selected
* in a consecutive order; I will change this later.
*/
// example calling code - we could have configured 4 hardware devices
insert_vals(0, [0, 1], [0x00000001, 0x000000FF]); // arg2 and arg3 equal in length
Как я могу это сделать?
В массиве символов C автоматически добавит '\0'
в конец массива, но это не похоже на массив целых чисел. Если бы я как-то смог определить длину match_num
и value
(см. Инструкцию if
) во время выполнения, то это позволило бы мне создать цикл for
.
Редактировать
Так как я знаю, что там будет максимум 4-х элементов, я не мог сделать что-то похожее на следующее?
void insert_vals(uint8_t num, uint8_t *match_num, uint32_t *value)
{
int i;
for(i = 0; i < 4; i++)
{
if(value[i] == -1)
break;
else
{
// Assign data
}
}
}
......... magic? –
Пожалуйста, позвоните по номеру – dasblinkenlight
Извините, ребята, вы здесь. – Biff