Передача 2D Const Array с использованием двойного указателя - PullRequest
0 голосов
/ 15 октября 2018

Я хочу передать двумерный константный массив, используя двойной указатель, но получаю ошибку компилятора.

const unsigned char sizex=2;
const unsigned char sizey=5;
const unsigned char arr[sizex][sizey] ={
  {1,2,3,4,5},
  {6,7,8,9,10}};

void foo (const unsigned char **a, const unsigned char x, const unsigned char y) {
  int i,j;
  for(i=0;i<x;i++) {
    for(j=0;j<y;j++) {
      Serial.println(a[i][j]);
    }
  }
}

void main() {
  foo(arr,sizex,sizey);
}

Ошибка

не может преобразовать 'const unsigned char (*)[5] 'to' const unsigned char ** 'для аргумента' 1 'to' void foo (const unsigned char **, unsigned char, unsigned char) '

void foo (const unsigned char a,[][5] const unsigned char x, const unsigned char y) работает, ноЯ не хочу вводить код [5] в код.

Есть предложения, что можно сделать, чтобы это исправить?

1 Ответ

0 голосов
/ 15 октября 2018

В C одним из решений является использование массивов переменной длины , что можно сделать, изменив порядок аргументов:

void foo (const unsigned char x, const unsigned char y, const unsigned char a[x][y]) { ... }

Однако это проблематично, поскольку Arduino на самом делезапрограммированы с использованием C ++, а не C, и C ++ не имеет массивов переменной длины (хотя некоторые компиляторы могли бы добавлять его как расширение).

Конечно, вы можете напрямую использовать глобальные константы (и массив)вместо передачи в качестве аргументов, если вам не нужно использовать одну и ту же функцию для разных массивов разных размеров.Работает с C и C ++.Это с оговоркой, что глобальных переменных следует избегать, насколько это возможно.

Естественное решение C ++ для вашей проблемы - использовать std::vector, но я не знаю, какая часть стандартной библиотеки C ++ доступнаесли есть.Вам, вероятно, следует изучить документацию Arduino , чтобы узнать, доступны ли вам другие типы контейнеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...