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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Nekrofreeman
6 / 6 / 0
Регистрация: 03.06.2012
Сообщений: 30
#1

Константный указатель на целое - C++

27.07.2012, 07:15. Просмотров 2161. Ответов 19
Метки нет (Все метки)

Начал осваивать С++ по книжке Страуструпа, одно из первых заданий: напишите описание константного указателя на целое. Как я это делаю:
C++
1
int *const dgt;
На что мне выдается ошибка которая подчеркивает точку с запятой и следующий текст: "Для константы переменная "dgt" требуется инициализатор"
Что я делаю не так? Пишу в MS Visual Studio 2010.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2012, 07:15     Константный указатель на целое
Посмотрите здесь:

Константный указатель - C++
Почему в данном примере константный указатель может быть использован для вывода элементов вектора? #include <iostream> #include...

Константный указатель - C++
Здравствуйте! Имею класс - MyClass. Константный указатель на него: const MyClass *pMyClass; Но в программе я присваиваю далее...

константный метод и указатель this - C++
class CBox { double Length; double Height; double Width; public: CBox(double a, double b, double c=1): Length(a),...

Неконстантный указатель на константный объект - C++
Добрый день, объясните пожалуйста, вот это: const int ival = 1024; int *const &piref = &ival; Типа мы создали дополнительное имя...

Константная переменная и константный указатель - C++
В чем разница : int const а; const int a; С указателями такое видел, с переменными нет.

Константный указатель на константные данные (указатели) - C++
В общем если раскомментить const то ничего не работает может кто знает как правильно передавать константный указатель на константные...

Константный указатель на константу меняет значение - C++
int d = 7; const int* const cd = &d; d = 8; qDebug()<<*cd;

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
27.07.2012, 07:31     Константный указатель на целое #2
Все верно, константный указатель нужно инициализировать при объявлении, например адресом другой переменной:

C++
1
2
int x;
int *const dgt = &x;
В дальнейшем указатель нельзя будет изменить. То есть написать что-то вроде

C++
1
dgt = &y;
уже не получится. Тут работает общее правило для всех констант, они должны быть проинициализированы и их значение нельзя изменить. Например:

C++
1
2
const int x = 100; // требуется инициализатор
x = 200; // ошибка, х - константа
dickivs
46 / 46 / 6
Регистрация: 25.11.2011
Сообщений: 270
Завершенные тесты: 1
27.07.2012, 07:35     Константный указатель на целое #3
по-моему ты объязательно должен проинициализировать указатель, не инициализация является ошибкой!
типичный пример не инициализации:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
int main()
{
int x,y;
int *const ptr=&x; // ошибка, ptr - всегда указывает
                         // на одну и ту же ячейку памяти
   *ptr = 7;
    ptr = &y;
 
return 0;
}
Nekrofreeman
6 / 6 / 0
Регистрация: 03.06.2012
Сообщений: 30
27.07.2012, 07:54  [ТС]     Константный указатель на целое #4
Ок, спасиб ребята.
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
27.07.2012, 08:12     Константный указатель на целое #5
dickivs
Почему же ошибка ?
C++
1
2
3
4
5
6
int i = 345;
 
const int *s = &i; //нету никакой ошибки
 
i = 23 //вот здесь уже ошибка
*s = 44 // И здесь
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
27.07.2012, 08:18     Константный указатель на целое #6
Цитата Сообщение от xADMIRALx Посмотреть сообщение
i = 23
Тут-то в чём ошибка кроме отсутствия точки запятой? И, кстати когда вы перенесли квалификатор const, то смысл выражения поменялся, это стал указатель на константные данные, а не константный указатель, как в изначальном примере.
Nekrofreeman
6 / 6 / 0
Регистрация: 03.06.2012
Сообщений: 30
27.07.2012, 08:19  [ТС]     Константный указатель на целое #7
Хм... Взялся за следующее задание. "Напишите программу которая печатает размеры основных типов и типа указателя. Используйте sizeof".
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Size of char" << sizeof(char) << endl;
    cout << "Size of int"  << sizeof(short int) << endl;
    cout << "Size of char" << sizeof(int) << endl;
    cout << "Size of long int" << sizeof(long int) << endl;
    cout << "Size of float" << sizeof(float) << endl;
    cout << "Size of double" << sizeof(double) << endl;
    cout << "Size of long double" << sizeof(long double) << endl;
    cout << "Size of signed int" << sizeof(signed int) << endl;
    cout << "Size of unsigned int" << sizeof(unsigned int) << endl;
    cout << "Size of char*" << sizeof(char*) << endl;
    cout << "Size of int*"  << sizeof(short int*) << endl;
    cout << "Size of char*" << sizeof(int*) << endl;
    cout << "Size of long int*" << sizeof(long int*) << endl;
    cout << "Size of float*" << sizeof(float*) << endl;
    cout << "Size of double*" << sizeof(double*) << endl;
    cout << "Size of long double*" << sizeof(long double*) << endl;
    cout << "Size of signed int*" << sizeof(signed int*) << endl;
    cout << "Size of unsigned int*" << sizeof(unsigned int*) << endl;
    return 0;
}
Написал вот такой код, он компилится открывает консольку с результатами, но она исчезает практически сразу, ничего не успеваю заметить, правильно отработало или нет. Решил всунуть в конец system("PAUSE"); вот так
C++
1
2
3
4
        ...
    system ( "PAUSE" );
    return 0;
}
и вдруг код перестал компилиться. Но тут произошло интересное, пока писал это сообщение, решил глянуть какую именно ошибку он там мне пишет, еще раз запустил компиляцию и все прекрасно и правильно заработало! Код не менял. Вот решил спросить почему system ( "PAUSE" ) так странно себя ведет? Может кто сталкивался. Так, мне на будущее.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2012, 08:22     Константный указатель на целое #8
Цитата Сообщение от xADMIRALx Посмотреть сообщение
dickivs
Почему же ошибка ?
xADMIRALx, это у него коментарий к 9 строке, сместилось немного. А у вас
i = 23 //вот здесь уже ошибка
это с чего вдруг?
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
27.07.2012, 08:25     Константный указатель на целое #9
Nekrofreeman, для system("pause") надо подключить:

C++
1
#include <cstdlib>
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2012, 08:28     Константный указатель на целое #10
Цитата Сообщение от Schizorb Посмотреть сообщение
Nekrofreeman, для system("pause") надо подключить:

C++
1
#include <cstdlib>
Не нужно. Раз у него работает. Достаточно #include <iostream>
Nekrofreeman
6 / 6 / 0
Регистрация: 03.06.2012
Сообщений: 30
27.07.2012, 08:30  [ТС]     Константный указатель на целое #11
Цитата Сообщение от Schizorb Посмотреть сообщение
Nekrofreeman, для system("pause") надо подключить:

C++
1
#include <cstdlib>
хм.. на будущее учту, но однако сейчас код без этой библиотеки откомпилился и работал с system ( "PAUSE" )
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
27.07.2012, 08:31     Константный указатель на целое #12
alsav22

А ну если сместилось,то да )

Nekrofreeman
VS студия автоматом находит биболитеки
Nekrofreeman
6 / 6 / 0
Регистрация: 03.06.2012
Сообщений: 30
27.07.2012, 08:35  [ТС]     Константный указатель на целое #13
Смышленая барышня)
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
27.07.2012, 13:32     Константный указатель на целое #14
Цитата Сообщение от Nekrofreeman Посмотреть сообщение
и вдруг код перестал компилиться. Но тут произошло интересное, пока писал это сообщение, решил глянуть какую именно ошибку он там мне пишет, еще раз запустил компиляцию и все прекрасно и правильно заработало! Код не менял. Вот решил спросить почему system ( "PAUSE" ) так странно себя ведет?
Возможно это не system( "PAUSE" ) ведет себя странно а просто во время компиляции не открылся .EXE-файл для записи. У меня так иногда бывает. Правда не знаю из-за чего это происходит. И вот такая ошибка появляется в Code::Blocks:
"ld.exe||cannot open output file file.exe Permission denied".
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
27.07.2012, 14:25     Константный указатель на целое #15
Ничего студия автоматически не находит. Просто где то во вложениях в iostream используется заголовок, в котором имеется прототип system(). Но это не означает, что не нужно подключать библиотеку, так как это всего лишь реализация компилятора, а не какая то "фича". На другом компиляторе, даже другой версии студии, данный код может просто не скомпилироваться.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2012, 15:08     Константный указатель на целое #16
Цитата Сообщение от Toshkarik Посмотреть сообщение
На другом компиляторе, даже другой версии студии, данный код может просто не скомпилироваться.
mingv тоже обходится #include <iostream>
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.07.2012, 15:17     Константный указатель на целое #17
Цитата Сообщение от alsav22 Посмотреть сообщение
mingv тоже обходится #include <iostream>
это не повод игнорировать эти хедеры!
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2012, 15:22     Константный указатель на целое #18
Цитата Сообщение от Jupiter Посмотреть сообщение
это не повод игнорировать эти хедеры!
А как узнать, какие хедеры необходимы? Обычно компилятор подсказывает, чего ему не хватает.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
27.07.2012, 15:27     Константный указатель на целое #19
В нормальных книгах пишут, в каких заголовочных файлах находятся прототипы нужных функций. Или читать стандарт.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2012, 17:45     Константный указатель на целое
Еще ссылки по теме:

Можно ли утверждать, что в C++ имя функции - константный указатель на функцию ? - C++
В учебнике &quot;Освой самостоятельно C++ за 24 часа&quot; (Либерти, Хорват) говорится, что таки да. А ещё попадались мнения на форумах, что таки...

Константный метод и константный аргумент в методе - C++
Товарищи! Возник вопрос, в чем же разница, между константным методом и ссылкой на const объект в const методе? И использование двух...

Функция с параметрами типа указатель на символ и ссылка на целое - C++
не могу разобратся с указателем на функцию хотя вроде понял , но так как понял не работает задание: Составить описание : Функция с...

Организовать ввод в однонаправленный список, узел списка состоит из двух полей: целое число и указатель - C++
Здравствуйте, нужна ваша помощь!!! Нужно написать программу Организовать ввод в однонаправленный список. Узел списка состоит из двух...

Организовать ввод в однонаправленный список. Узел списка состоит из двух полей: целое число и указатель. Не - C++
Организовать ввод в однонаправленный список. Узел списка состоит из двух полей: целое число и указатель. Необходимо добавить узел после...


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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.07.2012, 17:45     Константный указатель на целое #20
Цитата Сообщение от alsav22 Посмотреть сообщение
А как узнать, какие хедеры необходимы?
cplusplus.com
cppreference.com
msdn
Yandex
Объявления
27.07.2012, 17:45     Константный указатель на целое
Ответ Создать тему
Опции темы

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