Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

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

28.03.2013, 05:24. Показов 1846. Ответов 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**
. Почему и как с этим бороться?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.03.2013, 05:24
Ответы с готовыми решениями:

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

Передача двумерного статического массива в функцию
динамический массив передаётся (строки в комментах), статический - нет. в чём причина ? #include&lt;iostream&gt; using namespace...

Передача двумерного статического массива в функцию
#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...

9
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.03.2013, 07:01
Может так:
C++
1
func((int**)a, 10, 10);
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
28.03.2013, 07:07  [ТС]
не помогает.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.03.2013, 07:31
Цитата Сообщение от taras atavin Посмотреть сообщение
не помогает.
В смысле?

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

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

Не по теме:

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

0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
28.03.2013, 10:52  [ТС]
Цитата Сообщение от gray_fox Посмотреть сообщение
alsav22, не должно помочь. Когда память выделяется в куче, двумерный массив - массив указателей и array[i] ~ *(array + i * sizeof (int *)). Когда в статике, двумерный массив - массив массивов и array[i] ~ *(array + i * sizeof (int[row_size])). Если просто сделать каст второго к первому - индексация "сломается".
А как тогда?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.03.2013, 11:06
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 ]
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
28.03.2013, 11:49
taras atavin, да вроде никак, если только шаблон функции написать.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
28.03.2013, 13:03  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
taras atavin, Как-как. Разные функции создать например.
Какие?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.03.2013, 14:38
taras atavin, Ну как вариант http://liveworkspace.org/code/4pHdni$5
Ну или http://liveworkspace.org/code/4pHdni$7
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.03.2013, 14:38
Помогаю со студенческими работами здесь

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

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

Передача статического массива в функцию
Не получается передать статический массив в функцию, в VS 2008, вроде простая вещь , в чем ошибка подскажите плиз #include...

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

Возврат и передача статического массива в функцию, перегрузка функций
Написать программу, использующую потоки cout и cin для ввода/вывода и перегрузку функций. Программа должна содержать одноименные функции,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru