#pointers #arduino
#указатели #arduino
Вопрос:
У меня есть немного кода Arduino, который на данный момент сводит меня с ума, и я надеюсь, что вы, полезные люди, сможете помочь. Что я хочу сделать, так это инициализировать указатель на один из двух массивов целых чисел без знака. Переключатель считывается при каждом проходе, и указатель присваивается соответствующим образом, только компилятор имеет шипение над назначениями.
unsigned int spl_add_tbl[4096]; // arrary table no zero crossing points.
unsigned int zxd_add_tbl[4096]; // array table for zero crossing points.
unsigned int *tbl_ptr; // init table pointer
// ZXD switch D64. H = off, L = on.
if (digitalRead(64) == 1) {
// Zero Crossing off, assign Table Pointer to sample table
*tbl_ptr = amp;spl_add_tbl[0];
} else {
// Zero Crossing on, assign Table pointer to Zero Crossing Table and set A/D read mapping.
*tbl_ptr = amp;zxd_add_tbl[0];
}
Компилятор выдает ошибку: недопустимое преобразование из ‘unsigned int *’ в ‘unsigned int’ [-fpermissive]
Комментарии:
1.
tbl_ptr
является указателем наunsigned int
.*tbl_ptr
являетсяunsigned int
. Не назначайте указатель на anunsigned int
на anunsigned int
.2. Приветствую, Эрик, не уверен, что я все понимаю.
Ответ №1:
tbl_ptr
является указателем — вы не должны разыменовывать его, чтобы назначить ему массив:
if(digitalRead(64) == 1)
{
// Zero Crossing off, assign Table Pointer to sample table
tbl_ptr = amp;spl_add_tbl[0];
}
else
{
// Zero Crossing on, assign Table pointer to Zero Crossing Table and set A/D read mapping.
tbl_ptr = amp;zxd_add_tbl[0];
}
Комментарии:
1. Приветствую Мурейника, это сделало свое дело, и ты сохранил мое здравомыслие. Могу я просто спросить, не является ли * разыменованием ?.
2. @jlpniewski, черт возьми, отбросил там ключевое слово «не». Извините, я виноват. (однако сам код не должен был меняться)
3. tbl_ptr = amp;zxd_add_tbl[0]; Может быть просто tbl_ptr = zxd_add_tbl; Когда вы опускаете скобки, у вас есть указатель на первый элемент массива. Нет необходимости разыменовывать скобки, а затем снова брать адрес.