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

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

28.03.2013, 05:24. Показов 1820. Ответов 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
5499 / 4894 / 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
5499 / 4894 / 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
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru