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

Почему при выводе в поток char* выводится весь массив символов? - C++

Восстановить пароль Регистрация
 
Taguaje
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 4
16.12.2012, 01:35     Почему при выводе в поток char* выводится весь массив символов? #1
я немогу вот в чем разобраться
есть :
C++
1
2
3
4
5
6
int main()
{   char v[] = "Fdasda";
char *p=v;
cout << "\np=" << p;
cout << "\n*p=" <<*p;
}
почему вы выводе p он выводит мне весь массив ведь он содержит адрес 1 элемента массива
а при *p он как раз таки выводит 1 элемент?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
16.12.2012, 01:50     Почему при выводе в поток char* выводится весь массив символов? #2
Цитата Сообщение от Taguaje Посмотреть сообщение
я немогу вот в чем разобраться
есть :
C++
1
2
3
4
5
6
int main()
{   char v[] = "Fdasda";
char *p=v;
cout << "\np=" << p;
cout << "\n*p=" <<*p;
}
почему вы выводе p он выводит мне весь массив ведь он содержит адрес 1 элемента массива
а при *p он как раз таки выводит 1 элемент?
Потому что так устроен оператор cout, когда вы пишите p - имеете в виду адрес массива(адрес нулевого элемента), а когда - *p, вы имеете в виду значение по адресу p[0], когда *(p+1) - p[1] и т.д.
Taguaje
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 4
16.12.2012, 01:53  [ТС]     Почему при выводе в поток char* выводится весь массив символов? #3
Цитата Сообщение от vua72 Посмотреть сообщение
Потому что так устроен оператор cout, а когда вы пишите *p, вы имеет в виду p[0], когда *(p+1) - p[1] и т.д.
так а когда просто p
он что двигается по сылками и выводить весь массив?
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
16.12.2012, 01:55     Почему при выводе в поток char* выводится весь массив символов? #4
C++
1
char v[] = "Fdasda"
атоматически стал известен размер v

C++
1
char *p=v;
у указателя размер автоматически нельзя определить, откуда компилятору знать сколько выводить надо?
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
16.12.2012, 01:55     Почему при выводе в поток char* выводится весь массив символов? #5
Цитата из Праты: C++ представляет строку, используя указатель на ее
местоположение. Указатель может иметь форму имени массива элементов типа char, явного
указателя на char или же строки в кавычках. Таким образом, все следующие операторы с
cout отображают строки:
C++
1
2
3
4
5
char name[20] = "Dudly Diddlemore"; 
char * pn = "Violet D'Amore"; 
cout « "Hello!"; 
cout « name; 
cout « pn;
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
16.12.2012, 01:56     Почему при выводе в поток char* выводится весь массив символов? #6
Цитата Сообщение от vua72 Посмотреть сообщение
Потому что так устроен оператор cout
cout - это объект. Оператор в данном случае <<

Добавлено через 1 минуту
Цитата Сообщение от daslex Посмотреть сообщение
откуда компилятору знать сколько выводить надо?
Си строки заканчиваются символом с кодом ноль. Дойдя до этого символа вывод прекращается. И этим занимается не компилятор.
Taguaje
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 4
16.12.2012, 01:57  [ТС]     Почему при выводе в поток char* выводится весь массив символов? #7
напишите что делает программа при cout << p;
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
16.12.2012, 01:59     Почему при выводе в поток char* выводится весь массив символов? #8
Цитата Сообщение от Croessmah Посмотреть сообщение
cout - это объект. Оператор в данном случае <<

Добавлено через 1 минуту

Си строки заканчиваются символом с кодом ноль. Дойдя до этого символа вывод прекращается. И этим занимается не компилятор.
ну да, объект.

Добавлено через 1 минуту
Цитата Сообщение от Taguaje Посмотреть сообщение
напишите что делает программа при cout << p;
Вы ответы читаете? Или посты набираете?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
16.12.2012, 02:01     Почему при выводе в поток char* выводится весь массив символов? #9
Цитата Сообщение от Taguaje Посмотреть сообщение
напишите что делает программа при cout << p;
Выводит на экран "Fdasda".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2012, 02:02     Почему при выводе в поток char* выводится весь массив символов?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Taguaje
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 4
16.12.2012, 02:02  [ТС]     Почему при выводе в поток char* выводится весь массив символов? #10
все понял
спасибо)
Yandex
Объявления
16.12.2012, 02:02     Почему при выводе в поток char* выводится весь массив символов?
Ответ Создать тему
Опции темы

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