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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Kreativ
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
02.12.2012, 15:15     Инициализация указателей #1
Добрый вечер, объясните пожалуйста, что значит присвоение начальных значений указателям, как например в данном случае:
C++
1
2
float *fPtr = 0;
char *color="white";
если я после этих строк хочу вывести на экран адрес объекта, на который указывает указатель color , у меня выводит строку "white", я не совсем понимаю как это работает
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,898
Записей в блоге: 2
Завершенные тесты: 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
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.12.2012, 15:25     Инициализация указателей #3
C++
1
cout<<&color;
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,898
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,898
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,898
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,898
Записей в блоге: 2
Завершенные тесты: 1
02.12.2012, 16:05     Инициализация указателей #11
Цитата Сообщение от Kreativ Посмотреть сообщение
а для всех остальных типов если я хочу вывести на экран адрес объекта, который ссылается указатель использовать приведение void* не нужно?
Пока что, считайте что не нужно. Остальное придет по мере изучения
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2012, 16:12     Инициализация указателей
Еще ссылки по теме:

C++ Инициализация указателей
Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей C++
Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей C++

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

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

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