Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
punchik
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 14
1

Почему при выводе указателя получаем для char - значение по адресу, а для других типов - адрес

07.11.2014, 02:51. Просмотров 1123. Ответов 2
Метки нет (Все метки)

Есть следующий код. Результат работы этой программы представлен на рисунке. Почему при выводе указателя для char возвращается значение, а для других типов данных адрес? У кого какие есть мысли?
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
28
29
#include <iostream>
#include <windows.h>
 
using namespace std;
 
void part1();
 
int main()
{
 
    part1();
    system("pause>null");
    return 0;
}
 
void part1(){
    int i=10, *ii=&i;
    long l=500, *ll=&l;
    float f=2.5, *ff=&f;
    double d=30.5, *dd=&d;
    char c='q', *cc=&c;
    bool b=true, *bb=&b;
    cout << "int: " << dec << *ii << "\t\thex: " << hex << *ii << "\t\taddress: " << ii << endl;
    cout << "long: " << dec << *ll << "\thex: " << hex << *ll << "\taddress: " << ll << endl;
    cout << "float: " << dec << *ff << "\thex: " << hex << *ff << "\taddress: " << ff << endl;
    cout << "double: " << dec << *dd << "\thex: " << hex << *dd << "\taddress: " << dd << endl;
    cout << "char: " << dec << *cc << "\t\thex: " << hex << *cc << "\t\taddress: " << cc << endl;
    cout << "bool: " << dec << *bb << "\t\thex: " << hex << *bb << "\t\taddress: " << bb << endl;
}
Почему при выводе указателя получаем для char - значение по адресу, а для других типов - адрес
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2014, 02:51
Ответы с готовыми решениями:

Почему cout выводит строку для массива char и адрес для других типов?
Доброго времени суток! char ch=&quot;...&quot;; cout&lt;&lt;ch; В строковом массиве...

Почему при выводе в поток char* выводится весь массив символов?
я немогу вот в чем разобраться есть : int main() { char v = &quot;Fdasda&quot;;...

Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ?
Вопрос такой, почему в методе setnamedisc нужно использовать char *s для...

Как узнать адрес указателя на char?
Например, вот есть массив символов и указатель. И указателю присваиваем адрес...

Можно ли использовать cin.getline для указателя типа char*
Вот к примеру код он работает, но при отладке Ошибка доступа. #include...

2
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4777 / 2434 / 679
Регистрация: 18.10.2014
Сообщений: 4,158
07.11.2014, 02:54 2
Лучший ответ Сообщение было отмечено punchik как решение

Решение

Цитата Сообщение от punchik Посмотреть сообщение
У кого какие есть мысли?
Потому что 'operator <<' для стандартных потоков специально перегружен отдельно для типа 'const char *' и для типа 'const void *'. Первый выводит строку. Второй - числовое значение адреса. Указатели типа 'char *' идут в первый, а все остальные указатели, приводимые к 'const void *' - во второй.

Другим словам, это работает так потому, что это специально так сделано. Сделано именно для того, чтобы именно так это и работало.
1
punchik
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 14
08.11.2014, 14:06  [ТС] 3
Спасибо за ответ! Хотя то, что в пояснении своими словами, не очень понятно получилось. Про перегрузку почитаю более подробно. Тогда, надеюсь, и пойму до конца.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2014, 14:06

Шаблоны функции для типов char
покажите пожалуйста пример обработки строки с помощью шаблонов функций....

Минимальные и максимальные значения для типов: char ....
Каковы на вашей машине минимальные и максимальные значения для следующих...

Перегрузка операторов для стандартных типов/Сложение char[] и int
Добрый день. Захотелось узнать, а можно ли написать оператор сложения для char...


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

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

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