![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
ShadowC |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 23.6.2011 Репутация: нет Всего: нет |
собственно вот в чем возник вопрос
что бы передать обычный массив мы поступаем так:
это как известно передача по ссылке,
это соответвенно передача по значению,все это для обычных массивов....
вот так выглядит передача полного многомерного массива функции а вопрос вот в чем заключается,как расшифровать такую передачу многомерного массива.
|
||||||||
|
|||||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
нет.. такие выводы по предоставленым фрагментам кода сделать нельзя.. как будут передаваться параметры зависит от того как объявлена функция.. а объявление Вы не привели.. Это сообщение отредактировал(а) mes - 21.9.2011, 23:41 |
|||
|
||||
ShadowC |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 23.6.2011 Репутация: нет Всего: нет |
функция лишь принимает то что мы ей передаем,например
соответственно функция выглядит так
заголовок функции лишь покажет разрешу ли я модифицировать массив в его исходных ячейках,тоесть если захочу запретить,заголовок будет выглядить так
если ты знаешь другие способы определить принимающую аргумент функцию,то поделись пожалуйста |
||||||||
|
|||||||||
spyswamp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
ShadowC,
не подходит тебе? Ну, и размер отдавать. Хотя была в C функция, с помощью которой можно было определять размеры (длину) таких структур. Не помню название, но в стандартных заголовках есть. Это сообщение отредактировал(а) spyswamp - 22.9.2011, 09:05 -------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
newbee |
|
||||||||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 3 Всего: 19 |
Двумерный массив никак не связан с указателем на указатель.
Еще можно при объявлении функции явно указывать, что передается массив:
Добавлено через 2 минуты и 39 секунд
Во всяком случае в стандартной библиотеке. -------------------- You're face to face With man who sold the world |
||||||||
|
|||||||||
maydjin |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.1.2010 Репутация: нет Всего: нет |
Во-первых, учи матчасть и не заявляй столь авторитетно о том, что не до конца понимаешь(ссылки тут ни к лесу ни к огороду).
Во-вторых в 1 примере кода у тебя передаеться указатель на 1 элемент массива, а во втором отдельный элемент массива, что при приведенном тобой прототипе должно вызвать ошибку компиляции, если конечно, в массиве не храняться массивы того же типа. В с++ массивы представляються указателем на первый элемент, т.е:
Т.к. масив указатель на первый элемент, двумерный массив - массив указателей на 1-ые элементы массива т.е:
Да, и в-третьих если всё это для самообучения то дерзай, а если с какой то практической целью, то почитай про контейнеры. |
||||
|
|||||
ShadowC |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 23.6.2011 Репутация: нет Всего: нет |
вот это тот отрезок кода.
я знаю что такой вызов передает 1 строчку массива,но как это работает я не понимаю... Добавлено через 1 минуту и 40 секунд
вот это не понял Добавлено через 4 минуты и 7 секунд вопрос заключается в том как это дело работает |
||||||||
|
|||||||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 3 Всего: 19 |
Тут я наврала. int arr[2][3] нужно указывать (первый индекс можно опустить и передавать как еще один аргумент). Добавлено @ 09:44 Передается указатель на первый элемент массива {92,73}. Добавлено @ 09:47 Массив любой мерности можно привести к указателю на его первый элемент и далее по известным смещениям (индексам) получить доступ к любым данным в этом массиве. Если с некоторой натяжкой еще можно сказать, что массив является указателем, то гооворить о том, что двумерный массив является указателм на указатель, неверно. Это сообщение отредактировал(а) newbee - 22.9.2011, 09:48 -------------------- You're face to face With man who sold the world |
|||
|
||||
maydjin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.1.2010 Репутация: нет Всего: нет |
Не то что хотел бы оспорить, но разве:
хоть как то опровергает то , что переменные через которые мы обращаемся к массиву, на сколько я знаю, всегда являются указателями? И память то естественно линейна для любых структур данных, т.к. в конечном итоге она линейна на уровне железок. И в c++ "двумерный" массив является всего лишь массивом указателей, и даже не кем не гарантированно, что указателей именно на массивы и именно на массивы одного типа или размера, за исключением частного случая когда размерности задаються на этапе компиляции. P.S. многомерных массивов в c++ кстати вообще не существует ![]() Это сообщение отредактировал(а) maydjin - 22.9.2011, 09:59 |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 3 Всего: 19 |
Ну это как посмотреть. int a[2][3]..[128] вполне можно считать многомерным массивом, vector<vector... <int>...> - тоже. -------------------- You're face to face With man who sold the world |
|||
|
||||
ShadowC |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 23.6.2011 Репутация: нет Всего: нет |
почему тогда такого рода передача функции 1 строки работает,а вывод одной строки не работает?
вызовет ошибку |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 3 Всего: 19 |
Добавлено через 1 минуту и 29 секунд ShadowC, давай код целиком, мы не телепаты. -------------------- You're face to face With man who sold the world |
|||
|
||||
ShadowC |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 23.6.2011 Репутация: нет Всего: нет |
ты уверен что этого хочешь? там код на 200+ строчек это пример из книги дейтлов,там лишь сказано,что многомерный массив может быть представлен одномерными,но как это делается не сказано Это сообщение отредактировал(а) ShadowC - 22.9.2011, 10:33 |
||||
|
|||||
maydjin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.1.2010 Репутация: нет Всего: нет |
Мде действительно facepalm. Указатель можно представить как массив всегда, обратное не верно.
Т.С. слушай newbee. |
|||
|
||||
spyswamp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
newbee, про определение размеров - это я вспомнил какие-то свои давние эксперименты. Сейчас слегка погуглив, нашел пару вещей:
http://msdn.microsoft.com/en-us/library/z2s077bc(VS.80).aspx http://developer.apple.com/library/mac/#do...loc_size.3.html Соответственно, это нестандартные вещи, но имеют место быть. Хотя, раз не стандартные, то можно смело на них забить и забыть. Моя неправда. ![]() Далее, я и не говорил про то, что многомерный массив и "указатель на указатель на..." (нужное количество вставить) - это одно и то же. Я просто спросил, чем не подходит такой вариант. Кстати, там зря я const плюхнул, т.к. из названия функции modif() можно сделать некие выводы. ![]() Личное мнение: при динамическом выделении памяти вряд ли кто-то будет при передаче аргументов заморачиваться со скобочками и т.п. Проще (и очевиднее при чтении кода) когда работа с массивом идет через указатель. Остальное годится сугубо в академических целях для понимания механизма хранения и передачи информации (массив). Сам использую контейнеры вместо низкоуровневых структур. А так, да, с точки зрения хранения данных в памяти, нет никакой "многомерности". ![]() ShadowC, вот нашел еще тебе кой-чего почитать по этому поводу (человек, на мой взгляд, доступно написал, чего повторяться): http://www.rsdn.ru/forum/cpp/443690.1.aspx -------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |