Хитрое объявление указателей в Си |
Здравствуйте, гость ( Вход | Регистрация )
Хитрое объявление указателей в Си |
Litkevich Yuriy |
29.6.2011, 7:09
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
как это читать?Это указатель на указатель_на_масив? |
|
|
DIMEDROLL |
29.6.2011, 7:22
Сообщение
#2
|
Участник Группа: Участник Сообщений: 165 Регистрация: 28.9.2008 Из: Киев Пользователь №: 304 Спасибо сказали: 23 раз(а) Репутация: 0 |
незнаю, но у меня не компилится такое в 2008 студии
а это компилится, и это указатель на массив
Сообщение отредактировал DIMEDROLL - 29.6.2011, 7:23 |
|
|
Litkevich Yuriy |
29.6.2011, 7:35
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
на шёл в списке проблем одного из компиляторов, как не поддерживаемая форма объявления. Стало быть по стандарту допустимая.
|
|
|
Алексей1153 |
29.6.2011, 9:21
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
а menu0, menu1 какой тип имеют ?
если я рассуждаю верно, то:
- это тип элемента массива. То есть:
два или больше "const" или "*const" подряд - эквивалентны одному. А это константный указатель на константный тип (этот указатель надо инициализировать сразу и менять далее нельзя)
в итоге тип массива такой:
-массив константных указателей на char |
|
|
BRE |
29.6.2011, 9:45
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
как это читать?Это указатель на указатель_на_масив? Это массив указателей на указатели char - по другому это двухмерный массив строк. и это указатель на массив
Нет, это массив указателей... |
|
|
ViGOur |
29.6.2011, 9:52
Сообщение
#6
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
|
|
|
Iron Bug |
29.6.2011, 12:39
Сообщение
#7
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
ViGOur прав.
Собственно, ничего сложного в объявлениях Си нет. Просто нужно с хвоста разбирать выражение и смотреть типы. |
|
|
BRE |
29.6.2011, 12:51
Сообщение
#8
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
Iron Bug |
29.6.2011, 14:01
Сообщение
#9
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
не с конца, а от самого идентификатора, и смотреть в операции слева и справа в зависимости от их приоритета. я не могу вообразить ни одного примера, чтобы не с конца. "операции" там - функции и массивы(постфиксные) и указатели и ссылки(префиксные). первые имеют приоритет над вторыми. а редкие случаи указателей на функции или массивы разруливаются обычными скобками. в общем, всё равно в итоге выйдет, что с конца |
|
|
Litkevich Yuriy |
30.6.2011, 5:42
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Так надо бы раз и на всегда с этим покончить.
Есть: 1)
2)
3)
4)
"Читаем по слогам" (номера при const - условность): 1) указатель (* listnames1) на константный (const1) char 2) константный указатель (* const2 listnames2) на константный (const1) char 3) массив указателей (* listnames3[]) на константный (const1) char 4) константный массив (const3 listnames4[]) константных указателей (const2 *), на указатель на константный char (const1 char *) Всё верно? Может список пополнить ещё какими-то родственными объявлениями, кто что помнит? |
|
|
Текстовая версия | Сейчас: 14.1.2025, 1:01 |