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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Kreativ
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
#1

Инициализация указателей - C++

02.12.2012, 15:15. Просмотров 1307. Ответов 11
Метки нет (Все метки)

Добрый вечер, объясните пожалуйста, что значит присвоение начальных значений указателям, как например в данном случае:
C++
1
2
float *fPtr = 0;
char *color="white";
если я после этих строк хочу вывести на экран адрес объекта, на который указывает указатель color , у меня выводит строку "white", я не совсем понимаю как это работает
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 15:15     Инициализация указателей
Посмотрите здесь:

Инициализация указателей - C++
Здравствуйте! Возник вопрос только что. Я в принципе догатываеюсь, но для проверки решил спросить. Почему не работает такая...

Инициализация указателей - C++
Объявите указатели на следующие объекты: unsigned, char, double, int - проинициализируйте их, выведите их значения на экран. Запишите по...

Инициализация указателей в конструкторе - C++
Всем привет! Вот интересный вопрос. Написано, что до вызова тела конструктора создаются поля класса. Для пользовательских типов -...

Инициализация массива указателей на указатель - C++
Помогите инициализировать данное объявление: int **m6;

Инициализация массива указателей в классе - C++
Доброго времени суток. Столкнулся с проблемой, не могу инициализировать массив указателей в классе: class cards { ...

инициализация массива указателей на указатели - C++
Всем привет. Есть такой код: char **pchAr = new char*; //в цикле по i pchAr = new char; Как заменить эту строку,...

Инициализация массива указателей на функцию - C++
При попытке инициализировать массив указателей на функцию возникает ошибка, не могу разобраться в чем она и как решить её. Заранее...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 15:24     Инициализация указателей #2
Цитата Сообщение от Kreativ Посмотреть сообщение
если я после этих строк хочу вывести на экран адрес объекта, на который указывает указатель color , у меня выводит строку "white", я не совсем понимаю как это работает
Если хотите вывести указатель на символьный тип, то приведите его к void*
C++
1
2
3
4
5
6
7
8
9
int main()
{
    float *fPtr = 0;
    char *color="white";
    std::cout << fPtr << std::endl;
    std::cout << (void*)color << std::endl; 
    std::cin.get();
    return 0;
}
BumerangSP
4285 / 1407 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.12.2012, 15:25     Инициализация указателей #3
C++
1
cout<<&color;
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 15:27     Инициализация указателей #4
Цитата Сообщение от BumerangSP Посмотреть сообщение
cout<<&color;
Это будет адрес указателя color, а не адрес объекта, на который он указывает.
BumerangSP
02.12.2012, 15:33
  #5

Не по теме:

Croessmah, видимо, не сразу понял, о чем речь. Впредь лучше буду еще раз перечитывать)

Kreativ
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
02.12.2012, 15:34  [ТС]     Инициализация указателей #6
Цитата Сообщение от Croessmah Посмотреть сообщение
Если хотите вывести указатель на символьный тип, то приведите его к void*
все типы приводить нужно к типу void* или только символьный?
в строке char *color="white"; указатель color начинает указывать на строку "white", это присваивание вообще к чем идет и почему когда вывожу на экран просто color то выводится эта строка?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 15:42     Инициализация указателей #7
Цитата Сообщение от Kreativ Посмотреть сообщение
в строке char *color="white"; указатель color начинает указывать на строку "white", это присваивание вообще к чем идет
white содержит адрес, где лежит строка white
Цитата Сообщение от Kreativ Посмотреть сообщение
почему когда вывожу на экран просто color то выводится эта строка?
Так задумано. Если Вы "выводите" указатель на char, то считается, что Вы хотите вывести строку на которую он указывает, поэтому будут выведены все символы, начиная с адреса содержащегося в color и до завершающего символа '\0'.
Kreativ
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
02.12.2012, 15:51  [ТС]     Инициализация указателей #8
аа, спасибо, кажется разобрался, но есть еще вопрос
C++
1
2
float *fPtr = 0;
std::cout << fPtr << std::endl;
если я присваиваю 0 указателю, это означает что он теперь никуда не указывает? во второй строке на экран выводится 0
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 15:56     Инициализация указателей #9
Цитата Сообщение от Kreativ Посмотреть сообщение
если я присваиваю 0 указателю, это означает что он теперь никуда не указывает? во второй строке на экран выводится 0
да. Теперь указатель инициализирован нулем - в нем содержится адрес равный 0.
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
    float *fPtr = 0;
     float var=0;
    std::cout << fPtr << std::endl;
     fPtr=&var;
     std::cout << fPtr << std::endl;
    std::cin.get();
    return 0;
}
Kreativ
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
02.12.2012, 16:02  [ТС]     Инициализация указателей #10
ясненько, а Вы писали
Цитата Сообщение от Croessmah Посмотреть сообщение
почему когда вывожу на экран просто color то выводится эта строка?
Так задумано. Если Вы "выводите" указатель на char, то считается, что Вы хотите вывести строку на которую он указывает, поэтому будут выведены все символы, начиная с адреса содержащегося в color и до завершающего символа '\0'.
это же только для типа char? а для всех остальных типов если я хочу вывести на экран адрес объекта, на который ссылается указатель использовать приведение void* не нужно?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 16:05     Инициализация указателей #11
Цитата Сообщение от Kreativ Посмотреть сообщение
а для всех остальных типов если я хочу вывести на экран адрес объекта, который ссылается указатель использовать приведение void* не нужно?
Пока что, считайте что не нужно. Остальное придет по мере изучения
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2012, 16:12     Инициализация указателей
Еще ссылки по теме:

Задание размера и инициализация массива указателей в конструкторе - C++
1) h: SDL_Texture *textures; Как задать размер и инициализировать в конструкторе? Если пишу так: SDL_Texture *textures; ...

Инициализация - C++
1. Создать класс Solid 2. Его наследует Planet 3. В функции Gravitation используются объекты Solid Это все .h и .cpp библиотеки 4....

Инициализация переменной - C++
Приветствую уважаемые пользователи cyberforum! У меня появился вопрос по инициализации переменной с типом int Почему нельзя сделать вот...

Создание и инициализация - C++
Добрый вечер, я как всегда с нетривиальными вопросами :) допустим есть объект class myclass { int i; public: ...

Инициализация даты - C++
Есть класс Date для работы с датами. Необходимо реализовать такую инициализацию даты: ввод строкой вида &quot;гггг.мм.дд&quot;, а на экран должно...


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

Или воспользуйтесь поиском по форуму:
Kreativ
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
02.12.2012, 16:12  [ТС]     Инициализация указателей #12
Огромное Вам спасибо!
Yandex
Объявления
02.12.2012, 16:12     Инициализация указателей
Ответ Создать тему
Опции темы

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