|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.04.2010, 10:42 | #1 |
Пользователь
Регистрация: 29.03.2008
Сообщений: 51
|
Объявление указателей
Доброго всем дня!
В книге Шилдта наткнулся на замечание, что для того чтобы объявить указатель на 2-х мерный массив (например, из int), необходимо использовать следующую запись (скобки обязательны!): Код:
Код:
В первом случае: указатель на массив из 5-ти элементов типа int, во втором: массив из 5-ти указателей на int. Но ведь во втором случае никто не запрещает каждый из элементов массива указателей ptr[] рассматривать как начало одномерного массива из int. То есть, к примеру, в первом случае при ptr++ мы сдвигаемся к следующему одномерному массиву из int, во втором при ptr++ получается то же самое. NOTE: в книге Кернигана и Ритчи написано (глава "Сложные объявления"): Код:
Код:
Последний раз редактировалось Valter; 04.04.2010 в 10:45. |
04.04.2010, 11:07 | #2 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
можно обьявлять как угодно.
int *ptr1[5]; //массив из 5 элементов,каждый из его элементов является указателем. выделить память можно так: for(int i=0;i<5;i++){ ptr1[i]=new int[20]; получили массив 5х20 int (*ptr)[5]; //указатель на массив из пяти элементов. Выделить память можно так: ptr=new int[20][5]; //получили массив 20х5 ИМХО удобней писать int **ptr2; |
04.04.2010, 11:26 | #3 |
Пользователь
Регистрация: 29.03.2008
Сообщений: 51
|
То есть, с точки зрения чисто объявления и синтаксиса языка объявления, к примеру,
Код:
Код:
Равнозначны ли тогда или нет объявления для ptr: Код:
Код:
|
04.04.2010, 11:55 | #4 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
в первом случае получаем массив указателей, во втором указатель на массив
|
04.04.2010, 12:00 | #5 |
Участник клуба Подтвердите свой е-майл
Регистрация: 19.11.2007
Сообщений: 1,022
|
Код:
Код:
Код:
Последний раз редактировалось profi; 04.04.2010 в 12:02. |
04.04.2010, 12:09 | #6 | |
Пользователь
Регистрация: 29.03.2008
Сообщений: 51
|
Разобрался, спасибо. На самом деле, всю заковыку составили неправильные объявления у Кернигана и Ритчи:
Код:
Код:
У них же есть и объяснение различия в книге: Цитата:
Еще раз спасибо! profi Указатель на функцию я приводил, чтобы подчеркнуть разницу при использовании/не использовании скобок в объявлениях. Вопрос касался аспекта, есть ли такая разница в случае массивов указателей. Теперь все установлено и на своих местах. Просто опечатка в основополагающей книге ввела меня в заблуждение. Последний раз редактировалось Valter; 04.04.2010 в 12:12. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Объявление процедуры | Progs1024 | Общие вопросы Delphi | 11 | 02.12.2009 14:44 |
Объявление класса | Александр Елис | Помощь студентам | 2 | 22.10.2009 21:58 |
Объявление функции | Rekky | Общие вопросы C/C++ | 5 | 30.09.2009 16:59 |
объявление процедуры | AIst | Общие вопросы Delphi | 4 | 16.01.2009 14:12 |