|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.07.2017, 22:34 | #11 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
функция exampleBadBar работает с типом "указатель на массив", а не с типом "массив". |
|
29.07.2017, 22:40 | #12 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Получается, массивы существуют только внутри одной функции, а при передаче в другую они волшебным образом перестают быть массивами, а становятся указателями на массив.
Тогда в чём глубинный смысл знания об их внутренней структуре? |
29.07.2017, 22:42 | #13 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
1) Код усложняется
2) Код превращается в нечитабельную лапшу 3) Легче совершить ошибку 4) Это ничего не дает 5) Уходит больше времени а со ссылкой знает: Код:
|
29.07.2017, 22:44 | #14 | ||
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
Массив может быть неявно скастован к указателю на первый элемент. Указатель на какой-нибудь int и указатель на массив - разные вещи. Как минимум, не получить по башке? Цитата:
|
||
29.07.2017, 22:49 | #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]) хотите передавать любые массивы любых размерностей, без потери знания о размерностях, см пример функции выше: Код:
|
|
30.07.2017, 03:27 | #16 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
...если вам таки приспичило именно массив, с известными размерами во время компиляции, пишите std::array и все. Двумерный массив, например:
Код:
|
30.07.2017, 11:57 | #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. |
||
30.07.2017, 12:14 | #18 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
прохладная история.
http://rextester.com/CULJL90760 Код:
в вашем случае диагностирована только одна проблема (использование int) механизм благополучно профакапил ноль в качестве количество элементов массива и завалил всю работу с сегфолдом в рантайме. в случае с реальным массивом были диагностированы обе проблемы: и проблема отрицательных чисел, и нолик. отрицательные числа компилятор скомпилировать не позволил. зы: std::array полагает легальным нулевой размер массива. правда объявить то его можно. а вот использовать - нельзя. Цитата:
Последний раз редактировалось _Bers; 30.07.2017 в 12:23. |
|
30.07.2017, 14:22 | #19 | |
Форумчанин
Регистрация: 13.05.2017
Сообщений: 100
|
Цитата:
3) и почему? 4) Кернел и Ритчи не согласны) 5) я бы так не сказал К тому же, для обработки массива в другой ф-ции проблематично передавать и использовать синтаксический сахар, если заранее не знаешь размерности массива (на сколько я могу судить по полученному опыту). |
|
30.07.2017, 14:23 | #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 |