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

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

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

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

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

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

Что значит константный указатель на объект, указатель на константный объект, и как это можно использовать? - C++
Подскажите, что значит константный указатель на объект, указатель на константный объект, и как это можно использовать??

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

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

константный метод и указатель 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; С указателями такое видел, с переменными нет.

19
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 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; // ошибка, х - константа
2
dickivs
46 / 46 / 6
Регистрация: 25.11.2011
Сообщений: 275
Завершенные тесты: 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;
}
1
Nekrofreeman
6 / 6 / 0
Регистрация: 03.06.2012
Сообщений: 30
27.07.2012, 07:54  [ТС] #4
Ок, спасиб ребята.
0
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 // И здесь
1
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
27.07.2012, 08:18 #6
Цитата Сообщение от xADMIRALx Посмотреть сообщение
i = 23
Тут-то в чём ошибка кроме отсутствия точки запятой? И, кстати когда вы перенесли квалификатор const, то смысл выражения поменялся, это стал указатель на константные данные, а не константный указатель, как в изначальном примере.
0
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" ) так странно себя ведет? Может кто сталкивался. Так, мне на будущее.
0
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2012, 08:22 #8
Цитата Сообщение от xADMIRALx Посмотреть сообщение
dickivs
Почему же ошибка ?
xADMIRALx, это у него коментарий к 9 строке, сместилось немного. А у вас
i = 23 //вот здесь уже ошибка
это с чего вдруг?
0
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
27.07.2012, 08:25 #9
Nekrofreeman, для system("pause") надо подключить:

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

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

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

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

Nekrofreeman
VS студия автоматом находит биболитеки
1
Nekrofreeman
6 / 6 / 0
Регистрация: 03.06.2012
Сообщений: 30
27.07.2012, 08:35  [ТС] #13
Смышленая барышня)
0
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".
0
Toshkarik
1148 / 865 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
27.07.2012, 14:25 #15
Ничего студия автоматически не находит. Просто где то во вложениях в iostream используется заголовок, в котором имеется прототип system(). Но это не означает, что не нужно подключать библиотеку, так как это всего лишь реализация компилятора, а не какая то "фича". На другом компиляторе, даже другой версии студии, данный код может просто не скомпилироваться.
0
27.07.2012, 14:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2012, 14:25
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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