Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


           Интенсив по Python 3-5 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
           Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2011, 17:34   #1
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию Объявления

Доброго времени суток. Решаю упражнения по Страуструпу, столкнулся со слишком сложнами объявлениями, если у Вас есть минутка проверте код. Пятый и восьмой пункты, какой вариант правильный?
Код:
#include <iostream>

using namespace std;

int main()
{
	// 1. Тип unsigned shar
	typedef unsigned char UCHAR;

	// 2. Тип const unsigned char
	typedef const unsigned char CUCHAR;

	// 3. Указатель на целое
	typedef int* PINT;

	// 4. Указатель на указатель на char
	typedef char** PPCHAR;

	// 5. Указатель на массив char
	typedef char* PACHAR[];
	typedef char* PACHAR_2;

	// 6. Массив из семи указателей на целые числа
	typedef int (*APINT7)[7];

	// 7. Указатель на массив из семи указателей на целые числа
	typedef int* (*PAPINT7)[7];

	// 8. Массив из восьми массивов по семь указателей на целые
	typedef int ((*A8APINT7)[7])[8];
	typedef int (*A8APINT7_2)[7][8];
}
Благодарю за внимание, Алексей.
KemanSR вне форума Ответить с цитированием
Старый 29.01.2011, 19:04   #2
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

5 — первое (а второе там просто указатель на char)
8 — первое (а второе там двухмерный массив указателей на целые)
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 29.01.2011, 20:28   #3
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Цитата:
Сообщение от Obey-Kun Посмотреть сообщение
5 — первое (а второе там просто указатель на char)
8 — первое (а второе там двухмерный массив указателей на целые)
Согласен, только ведь указатель на массив это указатель на его первый элемент, т.е. именно на char. Ещё один вопрос мучает:
Код:
char* pChar;
Почему префикс * пишут после указания типа, но он ведь является элементом обьявляющей части? Судя по учебнику следует писать:
Код:
char *pPointer;
Понимаю что это тоже не вызовет ошибки, но всё-же...
KemanSR вне форума Ответить с цитированием
Старый 29.01.2011, 21:00   #4
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
Согласен, только ведь указатель на массив это указатель на его первый элемент, т.е. именно на char.
Да вы блеснули глубокими знаниями программирования .

Цитата:
Почему префикс * пишут после указания типа, но он ведь является элементом обьявляющей части?
Без разницы как его писать так char* pChar или так char *pChar. Просто если записать так char* pChar, то более понятно, что это указатель на тип char. Это зависит от стиля написания кода.
profi вне форума Ответить с цитированием
Старый 29.01.2011, 21:09   #5
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Цитата:
Сообщение от profi Посмотреть сообщение
Да вы блеснули глубокими знаниями программирования .
Да я вообщем-то не ради блеска, просто хотел спросить: char* p и char* p[] - эквивалентны?
Цитата:
Сообщение от profi Посмотреть сообщение
Без разницы как его писать так char* pChar или так char *pChar.
Но как ПРАВИЛЬНО?
KemanSR вне форума Ответить с цитированием
Старый 29.01.2011, 21:10   #6
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
Почему префикс * пишут после указания типа, но он ведь является элементом обьявляющей части? Судя по учебнику следует писать:
У Строуструпа своё мнение.
Читайте это в его FAQ
Вкратце: int *m это типа C-стиль, а int* m — типа C++-стиль.
Хотя на деле в большинстве крупных С++-проектов всё равно пишут int *m. То есть не следуют этой рекомендации Страуструпа. И, ИМХО, правильно, что не следуют.
Короче, правильны оба варианта. Это вопрос стиля. Страуструп говорил, что лучше int* m, но большинство его нафиг послали с этой рекомендацией. Это не значит, что вы должны ей не следовать. Делайте как нравится (или как принято у вас в проекте). Главное, придерживайтесь одного стиля.
Можно и int * m писать, вариант нейтральных парней .

Цитата:
char* p и char* p[] - эквивалентны?
Нет же.

Если честно, я вообще считаю книжку Строуструпа плохой. И многие со мной согласятся. Там проблемы с подачей материала и структурированностью. Лучше сначала изучить K&R2 (Керниган и Ритчи. Язык C. Издание 2. Она же «Белая Библия»), а потом читать Шилдта. Ознакомиться с книжками можешь тут: http://obey.su/books. Белая Библия — must have (хотя C++-программисту можно пропустить её часть, например о работе с файлами). И Шилдт хорош, ибо почти сразу учит канонам ООП.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 29.01.2011 в 21:30.
Obey-Kun вне форума Ответить с цитированием
Старый 29.01.2011, 21:33   #7
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Цитата:
Сообщение от Obey-Kun Посмотреть сообщение
Лучше сначала изучить K&R2 (Керниган и Ритчи. Язык C. Издание 2. Она же «Белая Библия»), а потом читать Шилдта.
Я С++ изучаю, тем более что с ООП в С проблеммы.
KemanSR вне форума Ответить с цитированием
Старый 29.01.2011, 21:44   #8
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
Я С++ изучаю, тем более что с ООП в С проблеммы.
Да не то чтобы проблемы, просто язык не заточен под эту парадигму. Знать C всё равно надо. Большая часть книг по C++ рассчитана на то, что вы уже знаете C.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 29.01.2011, 22:03   #9
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Цитата:
Сообщение от Obey-Kun Посмотреть сообщение
Большая часть книг по C++ рассчитана на то, что вы уже знаете C.
Неуверен. Пишу на Visual C++, решил заполнить некоторые пробелы, но путь: Visual C++ >> C++ >> C... что дальше ассемблер?
KemanSR вне форума Ответить с цитированием
Старый 29.01.2011, 22:09   #10
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Просто пробел, о котором вы тут говорите, касается C.

Обычно наоборот идут. asm -> C -> C++. Там получается наиболее глубокое понимание всего.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ

          Оплата за обучение в Kata Academy только после твоего трудоустройства в IT!
          Начни карьеру Middle Java-разработчика, подробнее на сайте академии, ссылка - https://clck.ru/fCqwP

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объявления событий Aleksey1989 Помощь студентам 11 04.11.2010 11:14
Что в ссылке на объект, после объявления? AnTe Общие вопросы Delphi 7 26.03.2010 04:30
[C++] Инициализация массива структур отдельно от объявления MariyaL Помощь студентам 0 30.09.2009 12:27
Пробема объявления массива в заголовке процедуры. mmx358 Паскаль, Turbo Pascal, PascalABC.NET 16 29.06.2009 09:46
Вопрос по поводу объявления класса в С++ Билдер prikolist Общие вопросы C/C++ 2 08.04.2009 23:07