Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> О многомерных массивах и их расположении в памяти, Только Си 
V
    Опции темы
whoever
Дата 13.9.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 5.7.2007

Репутация: нет
Всего: 1



В книге Кернигана и Ритчи "Язык программирования Си" сказано, что оператор [] выполняется слева направо (параграф "Приоритет и очередность вычислений"). Далее, в параграфе "Многомерные массивы" сказано, что объявление
Код
char array[X][Y];

объявит массив, где последовательно будут расположены объекты char длиной в Y (то есть, в оптимальном переборе чаще будет меняться второй индекс). Переводя в слова, это значит: "array есть указатель на X указателей, каждый из которых указывает на Y объектов char". (Указатель на N указателей - имеется в виду указатель на первый из N объектов, расположенных последовательно в памяти, каждый из которых есть указатель.)
Но раз [] выполняется слева направо, то вышеупомянутое объявление, как я понимаю, на самом деле должно говорить "array есть указатель на Y указателей, каждый из которых указывает на X объектов char". Иллюстрация мыслей такова (с учетом применения [] слева направо):
Код
char array[x][y] ~ (char array[x])[y] ~ (указатель на X char'ов)[y] ~ (указатель на Y (указатель на Х char'ов)'ов)

Последнее и есть "указатель на Y указателей, каждый из которых указывает на X объектов char".
Видимо, есть ошибка в моих рассуждениях. Прошу помощи.
PM   Вверх
Acer
Дата 13.9.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Код

char array[10][20];

означает, что array - это массив из 10-ти строк длинной 20 символов каждая.
Код

array[0]

 - это
Код

char str[20]

То есть array[0] - это есть указатель на первый элемент str[20]
PM MAIL   Вверх
whoever
Дата 13.9.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 5.7.2007

Репутация: нет
Всего: 1



В первом сообщении темы написано, что книга говорит о том же самом. Но разве не возникает при этом конфликта с утверждением о том, что оператор [] выполняется слева направо?
PM   Вверх
Acer
Дата 13.9.2008, 13:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Цитата(whoever @ 13.9.2008,  11:29)
Но раз [] выполняется слева направо, то вышеупомянутое объявление, как я понимаю, на самом деле должно говорить "array есть указатель на Y указателей, каждый из которых указывает на X объектов char".

Либо я чего-то не понимаю, либо ты путаешь право и лево
PM MAIL   Вверх
Daevaorn
Дата 13.9.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Тупо взять отладчик и пройтись по коду, тогда вопросы отпадут.
Переворачивать слова можно бесконечно и это просто бесполезно и глупо.
PM MAIL WWW   Вверх
whoever
Дата 13.9.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 5.7.2007

Репутация: нет
Всего: 1



Daevaorn, я понимаю, что должно произойти - отладчик бы тут не помог. Я пытался найти некую общую структуру объявлений, а не запоминать их как набор разрознённых правил.
Все, проблема решена. Спасибо всем уделившим ей внимание.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1095 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.