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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Посоветуйте решение. http://www.cyberforum.ru/cpp-beginners/thread340154.html
Есть пара значений вида: Значение(тип string) - число(тип float), которые нужно хранить "неразрывно". Значения передаются из другой функции, поэтому изначально количество таких пар не известно....
C++ Работа с динамическими массивами Добрый день! Написал программу на си, которая рисует окружность в псевдографике: // Clocks.cpp : Defines the entry point for the console application. #include "stdafx.h" #include <iostream>... http://www.cyberforum.ru/cpp-beginners/thread340150.html
C++ QT собирается четвертый час, "зависнув" на одном месте. Это нормальн?
Проблема в названии темы. Решил попробовать QT, скачал, выполнил, как положенно, "configure", после чего ввел "nmake". В мануале, по которому ставлю, сказанно, что на это может уйти около 3-х часов,...
C++ bad_alloc
народ че такое у меня прога прерывается и пишет "std::bad_alloc" ? кто знает что это? и как с этим бороться ?
C++ Считывание из файла http://www.cyberforum.ru/cpp-beginners/thread340106.html
Помогите пожалуйста,никак не могу найти,как считать данные из такого файла: Rup 106 12 38 40.2 -51 09 01 300.88 11.67 21.2 18.5 10.7 -17.8 4.3 NGC 4590 M 68 ...
C++ Не получается сделать статическую линковку своей программы в MinGW Написал на с++ программу, скомпилировал и решил дать другу потестить. Хотел слинковать статически при помощи ключа '-static', но неполучилось что же делать? подробнее

Показать сообщение отдельно
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
08.08.2011, 18:20
Постараюсь пояснить по указателям и 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 = &pi; //ошибка, так как ptr обычный указатель
const double *cptr = &pi; //все правильно, так как 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru