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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

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

28.03.2013, 05:24. Просмотров 899. Ответов 9
Метки нет (Все метки)

прототип
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++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;cstdlib&gt; #include &lt;fstream&gt; using namespace std; void...

Передача статического двумерного массива в функцию - C++
Добрый вечер. Вот один из способов передачи статической матрицы в ф-ию: void f(int arr) { ... } Подскажите, что на самом...

Передача функции статического двумерного массива - C++
Доброго времени суток, уважаемые жители Cyber-Forum. Не так давно я начал самостоятельно изучать Си++, и если честно, то ето вообще мой...

Передача статического двумерного массива, как параметра - C++
Не компилируется, пишет что не может открыть файл #include &lt;iostream&gt; #include &lt;conio.h&gt; #include&lt;cstdlib&gt; using namespace...

Передача статического массива в функцию - C++
Подскажите как передать двумерный статический массив в функцию void func(int arr); void main(){ const int s=5; int arr; ...

Передача двумерного массива в функцию - C++
Возможно это уже и естьна форуме, но как передать из одной функции в другую двумерный массив? (статическое распределение адресов)

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

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

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

Не по теме:

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

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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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!
1507 / 1210 / 68
Регистрация: 21.04.2012
Сообщений: 2,545
Завершенные тесты: 3
28.03.2013, 11:49 #8
taras atavin, да вроде никак, если только шаблон функции написать.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.03.2013, 13:03  [ТС] #9
Цитата Сообщение от ForEveR Посмотреть сообщение
taras atavin, Как-как. Разные функции создать например.
Какие?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
28.03.2013, 14:38 #10
taras atavin, Ну как вариант http://liveworkspace.org/code/4pHdni$5
Ну или http://liveworkspace.org/code/4pHdni$7
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2013, 14:38
Привет! Вот еще темы с ответами:

Передача двумерного массива в функцию - C++
проблема в том что в функция inicil не изменяет похожу массива, и в output выводятся нелепые числа... #include &lt;iostream&gt; #include...

Передача в функцию двумерного массива - C++
Доброго времени суток. Есть двумерный массив, размерностью n на m. Нужно передать его в качестве параметра в функцию 1) обычным способом 2)...

Передача двумерного массива в функцию - C++
Доброго времени суток, форумчане. Столкнулся с проблемой передачи двумерного массива (матрицы) по указателю в функцию. Подскажите?...

Передача двумерного массива в функцию - C++
Неожиданно для себя столкнулся с такой вот проблемой . Есть две функции : void print_matrix(double ** A, int n) { for (int i = 0;...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.03.2013, 14:38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru