2013-07-25 4 views
0

Я создал тестовую функцию: void test(double** matrix);Передача параметров в функции

Я хочу, чтобы перейти к этой переменной функции, как double matrix[2][2] = {{1,2},{2,3}};. Но мой злой компилятор пишет: cannot convert «double (*)[2]» to «double**» for argument «1» to «void test(double**)».

Что мне нужно сделать?

+3

Соблюдайте порядок злого компилятора. Вы не можете заменить 'double [] []' на 'double **', потому что макеты памяти различны. Вам нужно будет выделить свои строки с помощью 'new' или найти другой способ (подсказка:' vector'). – Nbr44

+1

Вам необходимо прочитать базовое руководство по языку C. –

+0

Mutidemensional массивы! = Зубчатые массивы. Жесткие массивы двойные ** и должны быть выделены с помощью new или malloc и представляют собой массив указателей. Многомерные массивы - это один непрерывный блок памяти, который можно индексировать смешно. – IdeaHat

ответ

0

Типы аргументов и параметров должны быть согласованы (или , по крайней мере, совместимы). Здесь у вас есть double[2][2], и вы хотите передать его double**. Типы не связаны: массив массивов не является массивом указателей (который будет конвертировать в указатель на указатель).

Если вы действительно хотите, чтобы пройти double [2][2], вам придется объявить параметр как double (*matrix)[2], или (еще лучше), double (&matrix)[2][2].

Конечно, если вы используете C++, вам необходимо определить класс Matrix и использовать его.

+0

'void test (double (& matrix) [2] [2])' дает 'error: expected ')' before '&' token' (по крайней мере, на C) для C++? –

+0

@DavidRF Да. Это чисто C++. Я не заметил, что вопрос был помечен как --- ответ на C должен быть 'double (* matrix) [2]'. –

Смежные вопросы