![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
rp80 |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Упражнения из страуструпа. Подскажите пожалуйста все ли тут верно?
И еще 1 вопрос. Можно ли инициализировать тип typedef int* PT[] не списком не инициализации? Пример:
Спасибо. |
|
|
![]() |
Iron Bug |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
Про скобки:
Приоритет оператора [] выше приоритета *. Поэтому выражение
означает массив из семи указателей на int. Фактически получается int (*(P7PAint[7])) (скобки расставлены так, как это воспринимает компилятор). Начинаем разворачивать скобки, начиная с наружних. Получается, что выражение *P7PAint[7] есть int. Далее, выражение P7PAint[7] есть int*. То есть, каждый элемент P7PAint имеет тип int* - указатель на тип int. Чтобы объявить указатель на массив, нужно указать компилятору, чего мы хотим, и расставить приоритеты:
Вот теперь это один указатель на массив из семи int-ов. То есть, приритеты выглядят так: int ((*P7PAint)[7]). Это означает, что (*P7PAint)[7] имеет тип int (каждый элемент массива (*P7PAint)[7] есть целое число), то есть, *P7PAint имеет тип int[7] . То есть, P7PAint есть указатель на массив из 7 элементов типа int, что и требовалось. да, кстати: при указателе на массив на стеке (определённый через []) размер массива должен быть явно указан. потому что выражение int (*foo)[] в общем смысле не может быть размещено компилятором как самостоятельный объект в памяти. его можно использовать только как указатель на уже готовую структуру данных, например, как-то так:
но это вряд ли принесёт особую выгоду, ибо тут можно просто запутаться. Сообщение отредактировал Iron Bug - 27.10.2011, 12:49 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 22.6.2025, 14:42 |