Невозможно преобразовать 'int (*)[size]' в 'int**': Cannot convert 'int (*)[size]' to 'int**'
Анализ этого и это отвечает под Arduino, что должно быть правильным способом передачи 2D-массив в функцию?
Функция должна быть применима к разным размерам 2D-массивов.
// ПРИМЕР НЕ СОСТАВЛЯЕТСЯ
void f(int** x,const int m, const int n){
// доступ к x как x[0][0], x[0][1] и т.д...
}
void main{}{
int x1[16][128];
f(x1,16,128);
int x2[64][16];
f(x2,64,16);
}
@Brethlosze, 👍2
Обсуждение1 ответ
Лучший ответ:
Согласно прототипу f
и шаблону использования его x
аргумент, функция ожидает, что этот аргумент будет указателем на
первый элемент массива указателей на первые элементы массивов
целое
. Однако матрица в main()
определяется как массив массивов
int
. Если вы попытаетесь передать это функции, матрица распадется
в указатель на массив int
. Это не то, что вам нужно.
Если вы хотите, чтобы оба измерения матрицы были переменными, единственный простое решение, которое я вижу, состоит в том, чтобы создать дополнительный массив указателей (указывающих к строкам матрицы) и передать этот массив в функцию
int main() {
int x[16][128];
// Строим массив указателей на строки.
int *px[16];
for (int i = 0; i < 16; i++)
px[i] = x[i];
f(px, 16, 128);
}
Дополнительную информацию об этом см. в разделе Массивы и указатели в часто задаваемые вопросы по языку C и, в частности, вопросы 6.16 (Как я могу динамически выделять многомерный массив?) и 6.19 (Как написать функции, которые принимают двумерные массивы, когда ширина не известен во время компиляции?).
- Как удалить элемент из массива arduino?
- Как вернуть значение массива символов в функции Arduino IDE?
- Передача массивов, глобальных массивов внутри функций, указателей и объявление размеров массивов.
- Вычислить размер массива, который был передан в качестве параметра функции
- Можно ли создать массив для функций?
- Ошибка получения адреса временного массива при передаче массива составных литералов
- Передача массива time_t в качестве параметра функции
- Как создать функцию, которая будет вводить определенное значение для подзначения массива в зависимости от положения джойстика?
компилятор должен знать размер второго измерения. один из вариантов:
void f(int x[][128],const int m){
, @JurajЯ бы предпочел использовать одномерный массив. Не так сложно преобразовать двухмерные индексы в одномерные., @KIIV