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

Консультации.[Липпман/Лажойе] - C++

Восстановить пароль Регистрация
 
Sodiet
0 / 0 / 0
Регистрация: 24.01.2011
Сообщений: 6
26.11.2011, 19:30     Консультации.[Липпман/Лажойе] #1
Приветствую.
Начал изучение языка C++ с книги Стенли Б.Липпмана и Жози Лажойе "Язык программирование C++. Третье издание". Про то, что Липпман не рекомендована для новичков, прочел уже в процессе обучения, но так как нареканий у меня нет, продолжил изучение.
Первоначальная цель темы - уточнения по поводу ответов на упражнения в книге.

§3.3. Указатели.
Упражнение 3.10

"Данная программа содержит ошибку, связанную с неправильным использование указателей:
C++
1
2
3
4
5
6
7
8
9
int foobar(int *pi) {
    *pi = 1024;
    return *pi;
}
int main() {
    int *pi2 = 0;
    int ival = foobar(pi2);
    return 0;
}
Ошибка заключается в том, что указателю не может быть присвоено значение NULL. Так ли это?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 19:30     Консультации.[Липпман/Лажойе]
Посмотрите здесь:

Консультации по seo
C++ Липпман для начинающих. С функцией.
Консультации по дизайну
Липпман или Шилдт C++
C++ перегрузка операции ++ (Липпман)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
26.11.2011, 19:34     Консультации.[Липпман/Лажойе] #2
Цитата Сообщение от Sodiet Посмотреть сообщение
Ошибка заключается в том, что указателю не может быть присвоено значение NULL. Так ли это?
нет, проблема не в этом. Проблема в разыменовании нулевого указателя
Sodiet
0 / 0 / 0
Регистрация: 24.01.2011
Сообщений: 6
26.11.2011, 19:47  [ТС]     Консультации.[Липпман/Лажойе] #3
C++
1
int *pi2 = 0;
Можно исправить на:
C++
1
int pi2 = 0;
?
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
26.11.2011, 19:52     Консультации.[Липпман/Лажойе] #4
можно, но только строку
C++
1
int ival = foobar(pi2);
нужно будет изменить на
C++
1
int ival = foobar(&pi2);
Байт
 Аватар для Байт
13964 / 8795 / 1223
Регистрация: 24.12.2010
Сообщений: 15,932
26.11.2011, 19:55     Консультации.[Липпман/Лажойе] #5
Sodiet, В этом коде сначала указателю pi присваивается нулевое значение, т.е. он указывает в никуда (ну, или в защищенную область памяти). А потом в функции foobar в это никуда записывается число 1024
Yandex
Объявления
26.11.2011, 19:55     Консультации.[Липпман/Лажойе]
Ответ Создать тему
Опции темы

Текущее время: 12:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru