|
0 / 0 / 0
Регистрация: 20.11.2014
Сообщений: 20
|
||||||
Работа с двухмерным динамеческим массивом через указатель20.11.2014, 23:07. Показов 2313. Ответов 22
Метки нет (Все метки)
Натупил здесь наверное сильно, подскажите ребят, а то долго уже сиджу над этим... Где ошибки? Программу компилирует, но потом выбивает.
0
|
||||||
| 20.11.2014, 23:07 | |
|
Ответы с готовыми решениями:
22
Работа с двухмерным динамическим массивом через указатель - исправить код Работа с двухмерным массивом Работа с двухмерным массивом данных |
|
5 / 5 / 4
Регистрация: 18.11.2014
Сообщений: 81
|
||||||
| 20.11.2014, 23:14 | ||||||
|
объявляй счетчики так for(int i = 0; i<n;i++)...
и выделение памяти для двумерного массива как-то так:
0
|
||||||
|
28 / 5 / 1
Регистрация: 18.11.2014
Сообщений: 68
|
||||||
| 20.11.2014, 23:19 | ||||||
|
двумерный динамический массив размерностью (size_x, size_y) следует выделять так, потому что по факту в сях нету двумерных массивов, создаётся одномерный массив из int*, указателей на одномерные массивы int:
0
|
||||||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
|
|||||||||||||
| 20.11.2014, 23:29 | |||||||||||||
|
Но если говорить о "сях", то в С поддерживаются и обыкновенные локальные массивы с неконстантной размерностью
Добавлено через 5 минут Но в любом случае ТС можно посоветовать научиться не упоминать имен типов в sizeof и воспользоваться способом 3б по вышеприведенной ссылке
0
|
|||||||||||||
|
И целого heap'а мало
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
|
||||||
| 20.11.2014, 23:31 | ||||||
|
jake09,
1
|
||||||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
|
||||||||||||
| 20.11.2014, 23:34 | ||||||||||||
0
|
||||||||||||
|
И целого heap'а мало
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
|
|
| 20.11.2014, 23:37 | |
|
TheCalligrapher, да знаю. Сам тут тоже вертел этими идиомами, да что-то народец не впитывает.
Студенту же нужно прогу написать, чтобы препод о******я, а не код-стайл впитать. Не по теме: В нормальном коде то такого конечно не напишу.
0
|
|
|
28 / 5 / 1
Регистрация: 18.11.2014
Сообщений: 68
|
|||
| 21.11.2014, 00:09 | |||
ISO/IEC JTC1 SC22 WG21 N 3690, § 8.3.4:
0
|
|||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
|
|||||
| 21.11.2014, 00:15 | |||||
Все остальное - детали реализации.
0
|
|||||
|
28 / 5 / 1
Регистрация: 18.11.2014
Сообщений: 68
|
|||
| 21.11.2014, 00:34 | |||
0
|
|||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
|
||||
| 21.11.2014, 00:48 | ||||
|
0
|
||||
|
28 / 5 / 1
Регистрация: 18.11.2014
Сообщений: 68
|
||||
| 21.11.2014, 01:06 | ||||
0
|
||||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
|
||||
| 21.11.2014, 02:01 | ||||
|
В С++03, например, это указано в 8.3.4. Где сказано 8.3.4/1. Что массив 'T a[N]' является непрерывно распределенной последовательностью из 'N' объектов типа 'T' (An object of array type contains a contiguously allocated nonempty set of N sub-objects of type T.) 8.3.4/2. Что типом 'T' может являться в том числе и другой массив (An array can be constructed from one of the fundamental types (except void), from a pointer, from a pointer to member, from a class, from an enumeration type, or from another array.) 8.3.4/3. Что такой объект и является тем, что называется "многомерным массивом" в С++ 8.3.4/4. Поясняет 8.3.4/3 примерами. То есть в языке С++ N-мерный массив определяется рекурсивно как 1-мерный массив N-1-мерных подмассивов. И т.д. Внешнее сходство сводится лишь к возможности применять [i][j] для доступа к элементам. Именно по этой причине новички зачастую наивно полагают, что именно так устроены встроенные языковые многомерные массивы. А на самом деле это не так. У вас сейчас есть уникальная возможность выкинуть весь этот мусор из головы и чему-то наконец научиться. Но для этого вы будете вести себя исключительно вежливо. Если что не понятно - будете задавать вежливые продуманные вопросы. А не устраивает - вперед колбаской по Малой Спасской!
0
|
||||
|
28 / 5 / 1
Регистрация: 18.11.2014
Сообщений: 68
|
|||
| 21.11.2014, 02:06 | |||
|
0
|
|||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
|
||||
| 21.11.2014, 02:21 | ||||
|
Если массив объявлен как 'int a[10][20]' и мы применяем к нему 'a[i][j]', то 'a[i]' - это i-тый объект типа 'int[20]' внутри 'a'. Это i-тый одномерный подмассив. Это подобъект типа "массив int[20]". И (ключевой момент!) в таком контексте он подвергается неявному стандартному преобразованию типа, называемому array-to-pointer conversion (cм. 4.2 в С++03). Это преобразование порождает временное значение - указатель на первый элемент подмассива 'a[i]' и далее работа идет уже с этим указателем. Ключевой момент здесь в том, что никакие указатели физически нигде не хранятся. Никакого массива указателей нет и никогда не было. Указатель возникает только воображаемый, концептуальный, временный, как промежуточный результат выполнения array-to-pointer conversion. Именно об этом подробно написано в той части спецификации, которую вы же сами и цитировали. Именно об этом написано и в K&R. Добавлено через 1 минуту В частности, встроенный языковый массив 'T a[M][N]' требует ровно 'M * N * sizeof(T)' памяти. А вот "jagged array" требует сверх этого еще дополнительно 'M * sizeof(T *)' памяти для явного хранения массива указателей.
0
|
||||
|
28 / 5 / 1
Регистрация: 18.11.2014
Сообщений: 68
|
|||||
| 21.11.2014, 02:40 | |||||
|
0
|
|||||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
|
|||||||||||||||||||||||
| 21.11.2014, 03:12 | |||||||||||||||||||||||
|
Зрителям: я по-моему везде ясно указывал, когда речь идет о встроенных массивах, а когда о рукописных "jagged arrays". Специально тщательно вставлял слова "встроенный" и "языковый". Но все оказалось тщетно. Пациент все свалил в одну кучу и увидел там "противоречия" Случай тяжелый, боюсь мы его теряем....
(Но пациент скорее мертв, чем жив и надежды на излечение малы...) ================= Но самое интересное произойдет, если мы перейдем в язык С с его поддержкой variable-length arrays и сделаем все размеры величинами времени выполнения ![]()
Где же "циклы"TM? Неужели волшебный 'malloc' как-то магически узнал, что нам нужен не просто плоский кусок памяти, а многомерный массив (небось выглянул из глубин своей реализации через перископ), и услужливо выполнил дополнительное выделение памяти для "массивов указателей"TM да еще и "циклов"TM втихаря накрутил для их инициализации!!! Воистину велики дела твои 'malloc'!
0
|
|||||||||||||||||||||||
|
28 / 5 / 1
Регистрация: 18.11.2014
Сообщений: 68
|
|||||||||
| 21.11.2014, 03:51 | |||||||||
0
|
|||||||||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
|
|||
| 21.11.2014, 04:15 | |||
|
Встроенные языковые массивы бывают "динамическими" только по первому размеру. Поэтому давайте-ка не будем отвлекаться и вернемся к моим примерам. Расскажите-ка нам, где ж там "циклы"TM и "массивы указателей"TM, которые, как вы утверждали, существуют во встроенных языковых массивах. Особенно меня интересует вариант с 'malloc' и variable-length arrays. Покажете-ка мне, где прячутся эти загадочные "циклы"TM и "массивы указателей"TM в обоих моих примерах. Я просто горю нетерпением их увидеть.
0
|
|||
|
28 / 5 / 1
Регистрация: 18.11.2014
Сообщений: 68
|
||||
| 21.11.2014, 05:04 | ||||
|
0
|
||||
| 21.11.2014, 05:04 | |
|
Помогаю со студенческими работами здесь
20
Работа с двухмерным массивом данных Операции с двухмерным массивом через консольное меню Работа с массивом структур в функции через указатель на этот массив Развлечения с массивом через указатель Проблемы с двухмерным массивом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера 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. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|