Форум программистов, компьютерный форум CyberForum.ru

Передача двумерного статического/автоматического массива в функцию - C++

Восстановить пароль Регистрация
 
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.03.2013, 05:24     Передача двумерного статического/автоматического массива в функцию #1
прототип
C++
1
void func(int **data, size_t n, size_t m);
. Динамический передаётся
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main ()
{
 int **a;
 size_t n;
 size_t m;
 size_t i;
 std::sin>n;
 std::sin>m;
 a=new (int*)[n];
 for (i=0; i<n; ++i)
 {
  a[i]=new int [m];
 }
 func(a, n, m);
. Но если массив статический/автоматический, то
C++
1
2
3
4
int main()
{
 int a[10][10];
 func(a, 10, 10);// ругается на эту строку, не может привести int*[] к int**
. Почему и как с этим бороться?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2013, 05:24     Передача двумерного статического/автоматического массива в функцию
Посмотрите здесь:

Передача двумерного массива в функцию C++
Передача двумерного массива в функцию C++
Передача статического двумерного массива в функцию C++
Передача двумерного массива в функцию C++
C++ Передача двумерного массива в функцию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.03.2013, 07:01     Передача двумерного статического/автоматического массива в функцию #2
Может так:
C++
1
func((int**)a, 10, 10);
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.03.2013, 07:07  [ТС]     Передача двумерного статического/автоматического массива в функцию #3
не помогает.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.03.2013, 07:31     Передача двумерного статического/автоматического массива в функцию #4
Цитата Сообщение от taras atavin Посмотреть сообщение
не помогает.
В смысле?

Добавлено через 1 минуту
Не компилируется?

Добавлено через 11 минут
Функция именно с таким прототипом должна быть?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
28.03.2013, 08:20     Передача двумерного статического/автоматического массива в функцию #5
alsav22, не должно помочь. Когда память выделяется в куче, двумерный массив - массив указателей и array[i] ~ *(array + i * sizeof (int *)). Когда в статике, двумерный массив - массив массивов и array[i] ~ *(array + i * sizeof (int[row_size])). Если просто сделать каст второго к первому - индексация "сломается".

Не по теме:

Хотя может я сам чего не так понимаю )

taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.03.2013, 10:52  [ТС]     Передача двумерного статического/автоматического массива в функцию #6
Цитата Сообщение от gray_fox Посмотреть сообщение
alsav22, не должно помочь. Когда память выделяется в куче, двумерный массив - массив указателей и array[i] ~ *(array + i * sizeof (int *)). Когда в статике, двумерный массив - массив массивов и array[i] ~ *(array + i * sizeof (int[row_size])). Если просто сделать каст второго к первому - индексация "сломается".
А как тогда?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.03.2013, 11:06     Передача двумерного статического/автоматического массива в функцию #7
taras atavin, Как-как. Разные функции создать например.
An lvalue or rvalue of type “array of N T” or “array of unknown bound of T” can be converted to a prvalue
of type “pointer to T”. The result is a pointer to the first element of the array.
Стандартные конверсии array -> pointer работают ТОЛЬКО для T[] в T*.

В остальных случаях все как-то так:
A consistent rule is followed for multidimensional arrays. If E is an n-dimensional array of rank i×j ×. . .×k,
then E appearing in an expression that is subject to the array-to-pointer conversion (4.2) is converted to a
pointer to an (n − 1)-dimensional array with rank j × . . . × k. If the * operator, either explicitly or implicitly
as a result of subscripting, is applied to this pointer, the result is the pointed-to (n − 1)-dimensional array,
which itself is immediately converted into a pointer.
Ну и пример из стандарта же

Example: consider
C++
1
int x[3][5];
Here x is a 3 × 5 array of integers. When x appears in an expression, it is converted to a pointer to (the
first of three) five-membered arrays of integers. In the expression x[i] which is equivalent to *(x+i), x is
first converted to a pointer as described; then x+i is converted to the type of x, which involves multiplying
i by the length of the object to which the pointer points, namely five integer objects. The results are added
and indirection applied to yield an array (of five integers), which in turn is converted to a pointer to the
first of the integers. If there is another subscript the same argument applies again; this time the result is an
integer. — end example ] — end note ]
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
28.03.2013, 11:49     Передача двумерного статического/автоматического массива в функцию #8
taras atavin, да вроде никак, если только шаблон функции написать.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.03.2013, 13:03  [ТС]     Передача двумерного статического/автоматического массива в функцию #9
Цитата Сообщение от ForEveR Посмотреть сообщение
taras atavin, Как-как. Разные функции создать например.
Какие?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2013, 14:38     Передача двумерного статического/автоматического массива в функцию
Еще ссылки по теме:

Передача функции статического двумерного массива C++
C++ Передача статического массива в функцию
Передача статического двумерного массива, как параметра C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.03.2013, 14:38     Передача двумерного статического/автоматического массива в функцию #10
taras atavin, Ну как вариант http://liveworkspace.org/code/4pHdni$5
Ну или http://liveworkspace.org/code/4pHdni$7
Yandex
Объявления
28.03.2013, 14:38     Передача двумерного статического/автоматического массива в функцию
Ответ Создать тему
Опции темы

Текущее время: 06:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru