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

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

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

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

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

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

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

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

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

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

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

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

11
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 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;
}
1
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.12.2012, 15:25 #3
C++
1
cout<<&color;
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 15:27 #4
Цитата Сообщение от BumerangSP Посмотреть сообщение
cout<<&color;
Это будет адрес указателя color, а не адрес объекта, на который он указывает.
1
BumerangSP
02.12.2012, 15:33
  #5

Не по теме:

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

0
Kreativ
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
02.12.2012, 15:34  [ТС] #6
Цитата Сообщение от Croessmah Посмотреть сообщение
Если хотите вывести указатель на символьный тип, то приведите его к void*
все типы приводить нужно к типу void* или только символьный?
в строке char *color="white"; указатель color начинает указывать на строку "white", это присваивание вообще к чем идет и почему когда вывожу на экран просто color то выводится эта строка?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 15:42 #7
Цитата Сообщение от Kreativ Посмотреть сообщение
в строке char *color="white"; указатель color начинает указывать на строку "white", это присваивание вообще к чем идет
white содержит адрес, где лежит строка white
Цитата Сообщение от Kreativ Посмотреть сообщение
почему когда вывожу на экран просто color то выводится эта строка?
Так задумано. Если Вы "выводите" указатель на char, то считается, что Вы хотите вывести строку на которую он указывает, поэтому будут выведены все символы, начиная с адреса содержащегося в color и до завершающего символа '\0'.
1
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
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 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;
}
1
Kreativ
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
02.12.2012, 16:02  [ТС] #10
ясненько, а Вы писали
Цитата Сообщение от Croessmah Посмотреть сообщение
почему когда вывожу на экран просто color то выводится эта строка?
Так задумано. Если Вы "выводите" указатель на char, то считается, что Вы хотите вывести строку на которую он указывает, поэтому будут выведены все символы, начиная с адреса содержащегося в color и до завершающего символа '\0'.
это же только для типа char? а для всех остальных типов если я хочу вывести на экран адрес объекта, на который ссылается указатель использовать приведение void* не нужно?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 16:05 #11
Цитата Сообщение от Kreativ Посмотреть сообщение
а для всех остальных типов если я хочу вывести на экран адрес объекта, который ссылается указатель использовать приведение void* не нужно?
Пока что, считайте что не нужно. Остальное придет по мере изучения
1
Kreativ
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
02.12.2012, 16:12  [ТС] #12
Огромное Вам спасибо!
0
02.12.2012, 16:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2012, 16:12
Привет! Вот еще темы с ответами:

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

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

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

по поводу указателей. Как правильно задавать массив указателей и его удалять? - C++
Т.е., например создаю указатель: TPoint *p_Point=NULL; а если массив? TPoint *p_MassPoint; //=?; как массив обнулить не ясно ...


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

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

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