117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
|||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||
Передача двумерных массивов и указателей в функцию15.08.2015, 10:26. Показов 9018. Ответов 11
Метки нет (Все метки)
Не по теме: Warning: если про это уже было, можете удалить это сообщение Передача двумерного массива функции Уже в который раз натыкаюсь на тему об ошибке передачи двумерного массива в функцию (либо при преобразовании типов, либо при индексации элементов). Так вот, сейчас я, фактически, перепишу страницу из "Языка программирования С++" от Сами-Знаете-Кого, так что если вы действительно хотите разобраться с фокусами С++, достаньте и прочтите эту книгу. Когда вы пишите так:
Такое объявление тоже не сработает:
В общем, решением является следующее:
1. В ранних компиляторах и в языке Си передавать массивы через двойной указатель можно, но ошибку времени исполнения схватить можно запросто (из-за access violation, скорее всего). 2. А вообще вы пользуетесь языком С++, в котором есть прекрасный класс vector<>, так что если вы пишите обычную программу (у которой нет серьезных ограничений по памяти/времени), пользуйтесь им. 3. Массивы строк (char* strs[]) передавать через двойной указатель можно, поскольку там в качестве последнего элемента выступает '\0', а все функции обработки строк стандартной библиотеки обрабатывают строки до этого символа.
0
|
15.08.2015, 10:26 | |
Ответы с готовыми решениями:
11
Передача двумерных массивов в функцию Передача двумерных массивов в функцию Передача двумерных массивов в функцию Составить программу на языке C++ для обработки двумерных массивов с использованием указателей |
Неэпический
|
||||||
15.08.2015, 10:42 | 2 | |||||
tnk500,
1
|
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
|
15.08.2015, 10:55 [ТС] | 3 |
Не по теме: Croessmah, согласен, шаблоны тоже решение. Но я писал для самых-самых зеленых, которые с шаблонами, может, и незнакомы. К тому же сомневаюсь, что человек, знающий о шаблонах, не будет знать правил передачи двумерных массивов. И разумеется, я забыл о динамических массивах. В них передача через двойной (в зависимости от размерности) указатель является по умолчанию.
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
15.08.2015, 10:59 | 5 |
Страуструп-то и одномерные в С++ не рекомендует использовать. Не понимаю этой любви к этому недотипу, да еще из другого языка, да еще и наворачиванию многомерных.
0
|
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
|
15.08.2015, 11:13 [ТС] | 7 |
Не по теме: Mr.X, см. в конец того сообщения. И все же они где-то да нужны. Croessmah, конечно, иначе и ошибок, мною описанных, не было бы. И операция new возвращает указатель на выделенный элемент(-ы) в куче. Честно говоря, был бы благодарен, если бы вы пояснили смысл вашего высказывания
0
|
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
|
15.08.2015, 11:52 [ТС] | 9 |
Croessmah, простите, но я где-то говорил, что массивы и указатели — одно и то же?) Я писал, что при передаче через обычный (общий) двойной указатель (int**) двойного массива выйдет ошибка компиляции, что чуть намекает на мою позицию. Ваш же пример специфицирует тип указателя до указателя на массив с тремя элементами, что вполне законно для целей указания на массив фиксированной длины. Этот же указатель можно передать функции, ожидающей указатель на массив такой длины.
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
15.08.2015, 16:51 | 10 | |||||
речь не об этом.
речь о том, что когда заходит речь о передаче массивов, то всегда заходит речь об указателях. в итоге в неокрепших деццких мозгах формируется каша. например такая:
но продолжают наивно верить в "динамические массивы", подразумевая при этом указатель.
0
|
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
|
15.08.2015, 17:08 [ТС] | 11 |
hoggy, но ведь не будете же вы называть динамический массив указателем на область памяти, выделенную во время исполнения? Да и называют скорее всего по привычке, в других распространенных ЯП динамический массив массивом и называется, вот и здесь указатель на дин. память дин. массивом и называют. А на что шарперам/явистам тонкости в типизации статических (обычных, не обязательно со словом static) и "динамических" массивов? Исправят параметризацию однажды, и забудут об этом.
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
15.08.2015, 17:53 | 12 |
0
|
15.08.2015, 17:53 | |
15.08.2015, 17:53 | |
Помогаю со студенческими работами здесь
12
Составить программу на языке C++ для обработки двумерных массивов с использованием указателей Передача двумерных массивов через указатель Какие есть виды массивов (кроме одномерных, двумерных и двумерных ступенчатых массивов)? Передача массивов указателей в качестве параметров функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |