|
17 / 17 / 1
Регистрация: 30.09.2009
Сообщений: 89
|
|||||||||||
Функции, передача массива в качестве параметра30.09.2009, 16:59. Показов 18256. Ответов 14
Метки нет (Все метки)
Приветствую)
Собственно, есть простенькое задание с двумерными массивами, оно выполнено:
(cannot convert parameter 1 from 'int [4][5]' to 'const int *') Помогите доделать, или подскажите, в каком направлении искать =)
0
|
|||||||||||
| 30.09.2009, 16:59 | |
|
Ответы с готовыми решениями:
14
Передача временного массива в качестве параметра функции Передача двумерного массива указателей на char в качестве параметра функции Передача функции в качестве параметра |
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
|
| 30.09.2009, 17:01 | |
Сообщение было отмечено как решение
Решение
это
int srch(const int* mas, const int a, const int b); заменить на int srch(const int (&mas)[str][stb], const int a, const int b);
3
|
|
|
17 / 17 / 1
Регистрация: 30.09.2009
Сообщений: 89
|
|
| 30.09.2009, 17:27 [ТС] | |
|
Спасибо, сейчас попробую =0
0
|
|
|
17 / 17 / 1
Регистрация: 30.09.2009
Сообщений: 89
|
||||||
| 30.09.2009, 20:31 [ТС] | ||||||
|
Работает) еще раз благодарю
вот окончательная версия, работает (двумерные массивы, функции, передача массива в качестве параметра, поиск строк с наибольшим количеством нулей). Может, понадобится кому)
0
|
||||||
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
|
| 30.09.2009, 21:13 | |
|
кстати, в таком случае дополнительные переменные a и b не нужны (если они используются для передачи количества строк/столбцов, чего из кода не видно)
получить их можно так: const size_t H = sizeof(mas) / sizeof(mas[0]); const size_t W = sizeof(mas[0]) / sizeof(mas[0][0]);
2
|
|
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|
| 01.10.2009, 03:01 | |
|
Rififi, а почему не работало? Ведь если у функции есть параметр-указатель,то можно передавать и массивы? Или ошибка потому,что параметр передаётся как const,и это связано с неявными преобразованиями указателя в массив?
0
|
|
|
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
|
|||||||
| 01.10.2009, 06:17 | |||||||
0
|
|||||||
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
|
| 01.10.2009, 13:30 | |
|
#pragma,
Rififi, а почему не работало? В этом случае не работало потому, что функция ожидала указатель, а передавался двумерный массив. Одно в другое не приводится. Ведь если у функции есть параметр-указатель,то можно передавать и массивы? Верно, но с некоторыми ограничениями. Самое главное из которых - когда компилятор неявно преобразует имя массива в указатель на первый элемент, то теряется информация о типе объекта. (был массив, имеющий вполне определённый размер, стал некий указатель) Ну и еще то, что нельзя таким образом передать имя двумерного массива в функцию, ожидающую int** - т.к. расположение данных в памяти отличается (это проявится только на стадии выполнения программы). Или ошибка потому,что параметр передаётся как const,и это связано с неявными преобразованиями указателя в массив? нет, const влияет только на то, что данные, которые адресует такой указатель нельзя изменить, причем об этом следит сам компилятор а не программист.
1
|
|
|
|
||||||||||||
| 01.10.2009, 14:29 | ||||||||||||
|
Однако я понимаю, чем вызван вопрос #pragm'ы, а потому просто отвечу конкретным исходником
В языке C99 (и в GNU C) есть понятие VLA - variable length array. Возможно, что на современных виндовых компиляторах это тоже поддерживается, а потому можнонаписатьболее элегантно. При этом надо понимать, что это не есть "станадртный Си" (условнообзову именно этим термином)
3
|
||||||||||||
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
|
| 01.10.2009, 15:02 | |
|
Evg,
Возможно, что на современных виндовых компиляторах это тоже поддерживается Что касается MS, то они по каким-то неведомым причинам не слишком жалуют С99 и не торопятся добавлять его поддержку в свой компиль. Так, даже новейшая скоро-выходящая VS2010 не обладает такой поддержкой. впрочем, имея C++ оно не особо-то и нужно. C++-эквивалент этого будет: template <typename T, const size_t n1, const size_t n2> void func(T (&arr)[n1][n2]); только, как видно, гораздо удобнее - не зависит от типа, и размерности массива считаюся автоматически компилятором
1
|
|
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
||||||
| 01.10.2009, 19:05 | ||||||
|
Evg,
Где-то мы это уже обсуждали, но всё равно напиши сюда конкретный пример, чтобы люди не искали Собстна, твой пример может быть переписан так:
0
|
||||||
|
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
|
|
| 20.11.2009, 13:29 | |
|
ага
0
|
|
|
21 / 21 / 2
Регистрация: 09.11.2010
Сообщений: 102
|
|
| 05.02.2011, 01:49 | |
|
а как передать строку массива в качестве параметра?
0
|
|
| 05.02.2011, 01:49 | |
|
Помогаю со студенческими работами здесь
15
Передача функции в качестве параметра Передача лямбда-функции в качестве параметра Передача CString в качестве параметра функции Передача функции в качестве параметра в другую функцию
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|