2012-03-14 2 views
0

Я пытаюсь создать указатель на начало матрицы, чтобы перейти в функцию в качестве аргумента. Вот что у меня есть:Создание указателя на первое значение матрицы

int **p; 
p = &(&matrix[0][0]); 
func(p); 

При этом, хотя я получаю ошибку «именующий требуется, так как унарный„&“операнд.» Я предполагаю, что это просто проблема, когда у меня нет правильного синтаксиса, но, возможно, нет. Любая помощь будет принята с благодарностью.

+5

'p = matrix' сделаю. – perreal

+1

@perreal в зависимости от того, как p объявлен, он может даже не компилироваться. –

ответ

4

Ну, matrix[0] указывает на начало матрицы (хотя сам по себе не указатель, а массив). Таким образом, следующие должны это сделать:

int* = matrix[0]; 
+0

Я не думаю, что матрица [0] даже доступна таким образом. Ты пробовал? Возможно & matrix [0] [0]. Но тогда ему придется рассматривать матрицу как массив внутри функции. Или бросьте его. Но если вы собираетесь использовать какой-то недействительный тип, тогда просто выберите void *. – Spidey

+0

@Spidey, почему он не работает? Работает на меня. –

+0

Ну, тогда я думаю, мне нужно больше учиться. Это не имеет большого смысла для меня. Если матрица [0] является int *, то матрица является int **. И это не так. Я имею в виду, это просто мой предрассудок ... – Spidey

0

Ваша функция должна ожидать ИНТ [] [SIZE] или Int * [SIZE] параметр для этого работать. Поскольку матрицы C линеаризуются, они не могут обрабатываться как указатели на указатели.

2

matrix [0] [0] - это int, поэтому его адрес равен & матрица [0] [0]. Вы хотите

p = &matrix[0][0]; 
Смежные вопросы