![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
функция exampleBadBar работает с типом "указатель на массив", а не с типом "массив". |
|
![]() |
![]() |
![]() |
#12 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
![]()
Получается, массивы существуют только внутри одной функции, а при передаче в другую они волшебным образом перестают быть массивами, а становятся указателями на массив.
Тогда в чём глубинный смысл знания об их внутренней структуре? |
![]() |
![]() |
![]() |
#13 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]()
1) Код усложняется
2) Код превращается в нечитабельную лапшу 3) Легче совершить ошибку 4) Это ничего не дает 5) Уходит больше времени а со ссылкой знает: Код:
|
![]() |
![]() |
![]() |
#14 | ||
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]() Цитата:
Массив может быть неявно скастован к указателю на первый элемент. Указатель на какой-нибудь int и указатель на массив - разные вещи. Как минимум, не получить по башке? ![]() Цитата:
|
||
![]() |
![]() |
![]() |
#15 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
void exampleBadBar(int a[2][3]) в качестве аргумента вы сами же указали тип данных: "указатель на массив" а не тип данных "массив". в аргументах int a[2][3] это - не массив. это - указатель на массив. причем - одномерный. такое вот кривое сишное наследие. хотите сохранить информацию о размерностях массива, передавайте его либо по ссылке на двухмерный массив: void exampleBadBar(int (&a)[2][3]) либо по указателю на двухмерный массив: void exampleBadBar(int (*p)[2][3]) хотите передавать любые массивы любых размерностей, без потери знания о размерностях, см пример функции выше: Код:
|
|
![]() |
![]() |
![]() |
#16 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
![]()
...если вам таки приспичило именно массив, с известными размерами во время компиляции, пишите std::array и все. Двумерный массив, например:
Код:
|
![]() |
![]() |
![]() |
#17 | ||
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
тип int, указанный в вашем шаблоне - знаковый. 1. он полагает легальным использование отрицательных величин. Цитата:
2. диапазон допустимых положительных значений получается в два раза меньше против реального диапазона std::array, прототип которого выглядит: template < class T, size_t N > class array; http://www.cplusplus.com/reference/array/array/ 3. почему вообще вы использовали знаковый тип данных для обозначения величины, которая в принципе не может быть отрицательной? где здравый смысл? Последний раз редактировалось _Bers; 30.07.2017 в 12:02. |
||
![]() |
![]() |
![]() |
#18 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
прохладная история.
http://rextester.com/CULJL90760 Код:
в вашем случае диагностирована только одна проблема (использование int) механизм благополучно профакапил ноль в качестве количество элементов массива и завалил всю работу с сегфолдом в рантайме. в случае с реальным массивом были диагностированы обе проблемы: и проблема отрицательных чисел, и нолик. отрицательные числа компилятор скомпилировать не позволил. зы: std::array полагает легальным нулевой размер массива. правда объявить то его можно. а вот использовать - нельзя. Цитата:
Последний раз редактировалось _Bers; 30.07.2017 в 12:23. |
|
![]() |
![]() |
![]() |
#19 | |
Форумчанин
Регистрация: 13.05.2017
Сообщений: 100
|
![]() Цитата:
3) и почему? 4) Кернел и Ритчи не согласны) 5) я бы так не сказал К тому же, для обработки массива в другой ф-ции проблематично передавать и использовать синтаксический сахар, если заранее не знаешь размерности массива (на сколько я могу судить по полученному опыту). |
|
![]() |
![]() |
![]() |
#20 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
![]()
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Язык Си - массивы | leonid_spartak | Помощь студентам | 1 | 12.05.2017 09:30 |
Массивы.Язык Си | Caca0 | Помощь студентам | 26 | 05.02.2013 00:10 |
массивы. язык СИ. | skauzer_blr | Помощь студентам | 8 | 10.04.2012 22:15 |
Массивы, язык - C. | xcyber | Помощь студентам | 9 | 19.10.2009 21:38 |
Массивы (язык С++) | Ноберт | Помощь студентам | 3 | 24.08.2009 23:10 |