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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

Доброго времени суток. Решаю упражнения по Страуструпу, столкнулся со слишком сложнами объявлениями, если у Вас есть минутка проверте код. Пятый и восьмой пункты, какой вариант правильный?
Код:
#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, 20:04   #2
Obey-Kun
Линуксоид
Профессионал
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Адрес: Москва
Сообщений: 1,403
Репутация: 165

icq: 323216
По умолчанию

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

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

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

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

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

icq: 323216
По умолчанию

Цитата:
Почему префикс * пишут после указания типа, но он ведь является элементом обьявляющей части? Судя по учебнику следует писать:
У Строуструпа своё мнение.
Читайте это в его 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 в 22:30.
Obey-Kun вне форума   Ответить с цитированием
Старый 29.01.2011, 22:33   #7
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
Репутация: 10
По умолчанию

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

icq: 323216
По умолчанию

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

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

icq: 323216
По умолчанию

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


07:11.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.