Переназначение указателей

#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 . Не назначайте указатель на an unsigned int на an unsigned 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; Когда вы опускаете скобки, у вас есть указатель на первый элемент массива. Нет необходимости разыменовывать скобки, а затем снова брать адрес.