У меня это определено:
int zinc[] = {D3, 180, 30, 5, 0, 15};
int omega[] = {D2, 180, 40, 0, 0, 30};
int magnesium[] = {D1, 180, 30, 5, 0, 15};
int order[] = {*zinc, *omega, *magnesium};
вызов
dispense(zinc);
работает, звоню
dispense(order[1]);
не.
Я думаю, что мне не хватает только одного символа.
Заранее спасибо!
В этом звонке
dispense(zinc);
выражение аргумента имеет тип массива.
В этом звонке
dispense(order[1]);
выражение аргумента имеет тип int
.
Таким образом, выражения аргументов имеют разные несовместимые типы.
Кажется, вы имеете в виду следующее объявление
int * order[] = { zinc, omega, magnesium};
вместо этого
int order[] = {*zinc, *omega, *magnesium};
В этом случае эти два вызова
dispense(zinc);
и
dispense(order[1]);
будет идентичным при условии, что функция не принимает массив по ссылке.
В любом случае у вас нет многомерного массива. В приведенном выше объявлении у вас есть массив указателей на первые элементы массивов, используемых в качестве инициализаторов. Тем не менее, вы можете получить доступ к целочисленным объектам, хранящимся в массивах, применяя два оператора индекса, например
order[i][j]
проблема, похоже, не связана с arduino, и, вероятно, каждый элемент порядка должен быть лучше, чем
struct&
, чемint*
.