Передача 2-D массива в качестве аргумента

Я пытаюсь передать 2-й массив функции, которая принимает указатель на указатель. И я узнал, что двумерный массив - ничто иное, как указатель на указатель (указатель на одномерный массив). Я, когда я компилирую код ниже, я получил эту ошибку.

#include

void myFuntion(int **array)
{
}
int main()
{
   int array[][]= {{1,2,3,4},{5,6,7,8,9},{10,11,12,13}};
   myFuntion(array);
   return 0;
}

В функции 'int main () ': Строка 5: ошибка: объявление 'массив» так как многомерный массив должен иметь границы для всех измерений, кроме первой компиляции, завершенной из-за -Wfatal-ошибок.

Кто-нибудь может очистить мои сомнения относительно этого и некоторых документов, если это возможно, для моих дополнительных сомнений.

 Fatima Zohra20 окт. 2012 г., 18:49
следует упомянуть строки !, в * массиве [3] []
 fredoverflow20 окт. 2012 г., 19:34
 chris20 окт. 2012 г., 19:02
@ysbhai, потому что он превращается в указатель на массив, а не указатель на указатель.
 John Dvorak20 окт. 2012 г., 18:50
@FatimaZohra указатель на массив 3 * x? Как оно сюда попало?
 yogi20 окт. 2012 г., 19:00
[ссылка на сайт]codepad.org/n8GRm9dU Ошибка: - ошибка: невозможно преобразовать 'int () [4] кINT * для аргумента '1' кvoid myFuntion (int **) ' почему это означает, что я пытаюсь передать myFunction (array);
 chris20 окт. 2012 г., 18:51
@FatimaZohra, на самом деле нужно указывать другие размеры, а не первые. Во всяком случае, этоs 2D-массив int-указателей и OP, ваши наборы должны содержать одинаковое количество элементов, чтобы выМожно укажите второе измерение.
 yogi20 окт. 2012 г., 18:54
@ Крис, что я хочу знать Почему я должен упомянуть размер в 2ne индексах 2-D массива, строка void myFunction (int array [] [4]) {} ??
 Afaq20 окт. 2012 г., 18:49
массив [] [] должен иметь определенный размер. Я думаю, нам не разрешено указывать массив без указания размера.
 chris20 окт. 2012 г., 18:46
Массивы не указатели. Этоне указатель на указатель, и этораспады на указатель на массив, когда онс переданы в функцию.

Ответы на вопрос(6)

не использовать std :: vector вместо "сырой» массивы. Преимущества:

1. Может динамически расти.

2. Нет проблем с передачей аргументов в функцию. То есть попробуйте вызвать void myFuntion (массив int [SIZE1] [SIZE2]); с массивом, который имеет несколько разных размеров, не SIZE1 и SIZE2

я всех измерений, кроме первого, поэтому вы должны дать

array[][size] //here you must to give size for 2nd or more 

Для передачи массива в функцию, массив - это не указатель на указатель, аs указатель на массив, так что вы пишете так

fun(int (*array)[])

Здесь, если вы пропустите круглые скобки вокруг (* array), тогда это будет массив указателей, поскольку приоритет операторов [] имеет более высокий приоритет по сравнению с *

Вы должны по крайней мере указать размер вашего второго измерения.

int array[][5] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8, 9 }, { 10, 11, 12, 13 } };

Существует также ошибка, которая часто повторяется. Чтобы передать 2D-массив в качестве аргумента, вы должны использовать следующие типы:

void myFuntion(int (*array)[SIZE2]);
/* or */
void myFuntion(int array[SIZE1][SIZE2]);
 md520 окт. 2012 г., 19:03
Вы читали мой ответ?
 yogi20 окт. 2012 г., 19:02
Можете ли вы дать свой отзыв по этой [link] codepad.org/n8GRm9dU [/ link] Ошибка: - ошибка: невозможно преобразовать 'int () [4] ' кINT * для аргумента '1' кvoid myFuntion (int **) ' почему это означает, что я пытаюсь передать myFunction (array);
 md520 окт. 2012 г., 19:05
array объявляется как указатель на массив размера.SIZE2SIZE2 здесь размер вашего второго измерения.
 RAJ KUMAR MISHRA03 окт. 2017 г., 10:15
На самом деле они оба одинаковы ---> int (* array) [SIZE2] = int array [SIZE1] [SIZE2]) ................................ .......... массив [SIZE1] [SIZE2] = (* (массив + SIZE1) [SIZE2]) = (* (массив + 0) [SIZE2]) = * массив [SIZE2]. Здесь 1-й аргумент игнорируется компилятором, поэтому SIZE1 = 0.
 yogi20 окт. 2012 г., 19:04
Можете ли вы дать логику за этим. void myFuntion (int (* array) [SIZE2]);

Другое шаблонное решение будет:

template<int m,="" int="" n="">
void myFunction(int array[N][M])
{
}
</int>
Решение Вопроса
  void myFunction(int arr[][4])

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

#include<iostream>
 void myFuntion(int arr[3][4]);
int main()
  {
  int array[3][4]= {{1,2,3,4},{5,6,7,8},{10,11,12,13}};
 myFuntion(array);
  return 0;
 }
   void myFuntion(int arr[3][4])
   {

   }
</iostream>

http://liveworkspace.org/code/0ae51e7f931c39e4f54b1ca36441de4e

Ваш ответ на вопрос