Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
#1

Вопросы по С++ - C++

08.08.2011, 16:42. Просмотров 1451. Ответов 12
Метки нет (Все метки)

1) Чем отличается const *char от сhar при использовании в программах?
2) Тип void * так и не понял как и что с ним делать. Видел в функциях в качестве возвращаемого значения зачем он там нужен?
3) Зачем при создании структуры использовать впереди typedef? Типа такого typedef struct klon {};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2011, 16:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопросы по С++ (C++):

Вопросы - C++
Здравствуйте! 1. Как сделать так, чтобы программа (функция (strlen() ) не считала пробелы? 2. Можно ли упростить (сократить)...

Вопросы - C++
Ребята, никто не писал никогда код на С++, связанный с имитационным моделированием? Просто, дали, там набор математич. формул и теория, а...

Вопросы по C++ - C++
Пожалуй начну) Можно ли в С++, обьявить определенному элементу массива определенное значение, как можно в пхп? Приведу пример: php:...

Вопросы по C++ - C++
Хочу учиться писать программы на C++, и у меня несколько вопросов 1) Этот язык такой же сложный, как Ассемблер? Например, Паскаль мне...

Вопросы по C++ - C++
Всем привет! У меня появилось несколько вопросов по C++, был бы рад, если бы Вы помогли бы мне хотя бы из одним из них. 1) Как...

Вопросы!!! - C++
прошу посоветовать что почитать чтобы ответить на следующие вопросы!!(можно ответить ссылками) если будут промеры по теме буду рад:) ...

12
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
08.08.2011, 16:45 #2
ElvenDragon,
1) Константный указатель и символ сравнивать... эээ?
2) void* - указатель в который гарантировано поместится указатель на любой тип. Работать напрямую с ним нельзя - только приводить к другому типу и работать как с указателем на конкретный тип.
3) Используется обычно в Си. Дабы не писать при объявлении struct klon - пишут просто klon.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct info
{
    int value;
};
 
info val; // ошибка
struct info val; // окей.
 
typedef struct
{
    int value;
} info;
 
info val; //окей
2
LosAngeles
Заблокирован
08.08.2011, 17:13 #3
вроде если конст стоит слева от * то указатель на константу, а если справа - константный указатель?
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.08.2011, 17:22 #4
C
1
2
const char* // указатель на константу
char const* //константный указатель
0
ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
08.08.2011, 17:25  [ТС] #5
Цитата Сообщение от Maxwe11 Посмотреть сообщение
C
1
2
const char* // указатель на константу
char const* //константный указатель
0
LosAngeles
Заблокирован
08.08.2011, 17:36 #6
Цитата Сообщение от Maxwe11 Посмотреть сообщение
C
1
2
const char* // указатель на константу
char const* //константный указатель
а не так?
C
1
2
const char* // указатель на константу
char* const //константный указатель
Добавлено через 1 минуту
пример разбери
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
    int i = 90;
    int j = 80;
    int const* pi = &i;
    int* const ip = &i;
 
    pi = &j;
    ip = &j;
 
    pi[0] = 45;
    ip[0] = 87;
    
    return 0;
}


Добавлено через 49 секунд
правильный ответ такой)
Цитата Сообщение от Maxwe11 Посмотреть сообщение
const char* // указатель на константу
char const* // указатель на константу
1
ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
08.08.2011, 17:38  [ТС] #7
1) Чем отличается const *char от сhar* при использовании в программах? Я звездочку забыл указать.
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.08.2011, 17:38 #8
Цитата Сообщение от LosAngeles Посмотреть сообщение
а не так?
верно)
0
Сыроежка
Заблокирован
08.08.2011, 17:43 #9
Цитата Сообщение от Maxwe11 Посмотреть сообщение
C
1
2
const char* // указатель на константу
char const* //константный указатель
У вас в обоих сллучаях объявлен указатель на константу. Чтобы указать константный указатель, следует писать

C++
1
char * const p;
А чтобы записать константный указатель на константу, следует писать

C++
1
const char * const p;
Добавлено через 3 минуты
Цитата Сообщение от ElvenDragon Посмотреть сообщение
1) Чем отличается const *char от сhar* при использовании в программах? Я звездочку забыл указать.
const char * означает\. что с поиощью этого указателя нельзя менять данные, на которые он указывает. То есть такое объявление означает, что данные, на которые указывает указатель, евляются константными, не подлежащими изменению.
0
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
08.08.2011, 18:20 #10
Постараюсь пояснить по указателям и const.
Указатели и спецификаторы const. Рассмотрим несколько видов:
- указатели на константу.
- константные указатели.
- константные указатели на константу.
Указатели на константу.
1) Здесь cptr указатель на объект типа const double и спецификатор const относится именно к типу объекта, на который указывает cptr, а не к самому указатели cptr непосредственно
C++
1
const double *cptr; //cptr может указывать на переменную типа double, которая является константой
C++
1
2
3
const double pi = 3.14;
double *ptr = π //ошибка, так как ptr обычный указатель
const double *cptr = π //все правильно, так как cptr - указатель на константу
2) Для хранения константного объекта нельзя использовать указатель типа void, вместо него следует использовать тип const void, который способен содержать адрес константного объекта.

C++
1
2
3
const int universe = 42;
const void *cpv = &universe; //все правильно, так как cpv является указателем константу
void *pv = &universe; //ошибка, так как universe константа
3) Указателю на константный объект м. б. присвоен адрес не константного объекта.
C++
1
2
3
const double *cptr;
double dval = 3.14;
cptr = &dval; //такой вариант прокатит, но изменить значение dval с помощью cptr нельзя
4) В продолжении предыдущего примера - есть такой хитрый вариант:
C++
1
2
3
4
5
6
...
dval = 3.1415; //неконстанта, переменная типа double
*cptr = 3.1415; //ошибка, cptr - указатель на константу.
double *ptr = &dval; //ptr указывает на не константный объект, переменную типа double
*ptr = 2.72; //все прокатит, так как ptr является обычным указателем на не константный объект, переменную типа double
cout << *cptr; //напечатет 2.72
Для указателя cptr не имеет значения, является ли объект, на который он указывает, константой или нет. Важно помнить, что нет никакой гарантии, неизменности объекта, адрес которого хранит указатель на константу. Указатели на константу имеет смысл рассматривать как указатели, которые "полагают", что указывают на константу.

Константные указатели.
1) Подобно любым другим константам, изменить значение константного указателя нельзя, т.е. ему нельзя присвоить адрес другого объекта.
C++
1
2
3
int ix = 0;
int *const ptrc = &ix; //ptrc - константный указатель, который следует инициализировать при создании
ptrc = ptrc; //ошибка! Так как ptrc - константный указатель, ему нельзя уже ничего присвоить!
2) Константный указатель можно использовать для изменения значения, на которое он указывает.
C++
1
2
3
4
5
int ix = 0;
int *const ptrc = &ix;
cout << ix << endl; //напечатает 0
*ptrc = 42;
cout << ix << endl; //напечатает 42
Константные указатели на константу.

1)
C++
1
2
const double pi = 3.1415;
const double *const pi_ptr = &pi; //константный указатель на константный объект
Тут не м. б. изменены ни адрес, который хранит указатель pi_ptr, ни значение объекта ( константы pi ), на который он указывает.

Использованные источники:
Стенли Липпман "Язык программирования C++ вводный курс" 4 изд.
google.ru
1
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
08.08.2011, 18:35 #11
Цитата Сообщение от Roof Посмотреть сообщение
4) В продолжении предыдущего примера - есть такой хитрый вариант:
C++
1
2
3
4
5
6
...
dval = 3.1415; //неконстанта, переменная типа double
*cptr = 3.1415; //ошибка, cptr - указатель на константу.
double *ptr = &dval; //ptr указывает на не константный объект, переменную типа double
*ptr = 2.72; //все прокатит, так как ptr является обычным указателем на не константный объект, переменную типа double
cout << *cptr; //напечатет 2.72
оО и что здесь хитрого?
хитрый это будет вот это.
C++
1
2
3
4
5
6
const double *cptr;
    double dval = 3.14;
    cptr = &dval;
    dval = 3.1415; //неконстанта, переменная типа double
    (double)*cptr = 2.72; //ошибки нет, явное привидение типов.
    cout << *cptr; //напечатет 2.72
0
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
08.08.2011, 18:38 #12
хитрым назвал только для того чтобы акцентировать внимание на то, что нет гарантии неизменности объекта, на который указывает указатель на константу.
Да и в приведении типов нет ничего хитрого.
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
08.08.2011, 19:09 #13
Цитата Сообщение от ElvenDragon Посмотреть сообщение
1) Чем отличается const *char от сhar* при использовании в программах? Я звездочку забыл указать.
Тем что указателей типа const *char - не бывает!
0
08.08.2011, 19:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2011, 19:09
Привет! Вот еще темы с ответами:

Теоретические вопросы по С++ - C++
Нужна помощь в ответах на несколько вопросов. Помогите плз!:) 1) Как инициализировать переменную, являющуюся приватным статическим...

Вопросы по файлам - C++
Что такое неформатированный(необработанные) данные в файле? Почему сдесь в коде в файл не записываются данные с массива? #include...

Вопросы начинающего - C++
Здравствуйте. Самостоятельно приступила к изучению Visual C++, т.к. наставников в шаговой доступности нет, а вопросы есть, решила...

Ответить на вопросы - C++
1. Какое условие является обязательным для присвоения одного объекта другому? 2. Когда объект передается функции в качестве аргумента,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru