|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.07.2017, 22:20 | #1 |
Форумчанин
Регистрация: 13.05.2017
Сообщений: 100
|
язык Си массивы
Возникла такая проблема: обычно при работе с массивами я не использую синтаксический сахар, а обращаюсь к элементам массива с помощью *(mas + n). Но это правильно работает только с одномерными массивами - если это многомерный (дву-) массив, то выдает ошибку, если ставить **(mas l * SIZE + n), то, хоть никакой ошибки не появляется, программа просто не работает как надо. Как правильно обращаться к элементу многомерного массива не используя синтаксический сахар?
|
29.07.2017, 00:39 | #2 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Для того, чтобы работать через конструкцию *(mas + i * SIZE + k), нужно иметь одномерный массив размера M*N (эмуляция двумерности)
Двумерный массмв нужно разыменовывать два раза вложенно, примерно так: Код:
|
29.07.2017, 07:07 | #3 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
"двумерный массив" (тот, что пишится arr[i][j]) есть массив УКАЗАТЕЛЕЙ на УКАЗАТЕЛИ на ЗНАЧЕНИЯ. Поэтому у вас и не работает, как хотите. В общем случае, там не линейная память.
Для такой записи *(mas + i * SIZE + k) вам нужно делать синтаксичски 1 мерный массив с размером M*N значений. Кстати удалять двумерные массивы нужно циклом - сначала каждую строку delete[], а потом весь массив так же (и распределять построчно). |
29.07.2017, 08:28 | #4 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
|
29.07.2017, 16:51 | #5 |
Форумчанин
Регистрация: 13.05.2017
Сообщений: 100
|
|
29.07.2017, 16:55 | #6 |
Форумчанин
Регистрация: 13.05.2017
Сообщений: 100
|
Спасибо
Последний раз редактировалось tutejshy; 29.07.2017 в 17:01. |
29.07.2017, 21:09 | #7 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
нет никаких ни "общих случаев",
ни "частных случаев". есть один единственный случай: память в массивах всегда располагается линейно. и это не зависит от его разрядности. следующий код иллюстрирует, как найти минимальный элемент в массивах любой разрядности: http://rextester.com/DOR88516 Код:
|
29.07.2017, 22:07 | #8 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
Это если именно массивы, а не их эмуляция через массив указателей и т.д.
|
29.07.2017, 22:11 | #9 | |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Цитата:
Код:
|
|
29.07.2017, 22:27 | #10 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Язык Си - массивы | 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 |