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

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

Войти
Регистрация
Восстановить пароль
 
Taguaje
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 4
#1

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

16.12.2012, 01:35. Просмотров 699. Ответов 9
Метки нет (Все метки)

я немогу вот в чем разобраться
есть :
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 элемент?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2012, 01:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему при выводе в поток char* выводится весь массив символов? (C++):

Считывание из файла в char - при выводе выводится лишнее - C++
Считываю из файла в строку типа char, если у меня в строке меньше 16 символов, то при выводе выводится какой-то мусор, наверное связано с...

Почему выводится весь массив - C++
Доброго времени суток! Прошу прощения за нубский вопорс, но окончательно запутался. В указателе на массив хранится АДРЕС первого элемента...

не выводится Массив символов (char) - C++
в названии тома и в Файловой системе выводятся непонятные символы. Это по ходу связано с чаровским массивом. Как мне сделать? char...

При выводе на экран переменной string выводится набор левых символов - C++
int main() { int s; string b; printf(&quot;DEC: &quot;); scanf(&quot;%i&quot;, &amp;s); for (int i = 31; i &gt;= 0; i--) { s += (char)(((b &gt;&gt;...

Почему при выводе указателя получаем для char - значение по адресу, а для других типов - адрес - C++
Есть следующий код. Результат работы этой программы представлен на рисунке. Почему при выводе указателя для char возвращается значение, а...

При выводе числа выводится #INF - C++
В общем, задали написать программу вычисления кубического уравнения. В сети нашёл алгоритм решения (ссыль, который можно спокойно...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
16.12.2012, 01:50 #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] и т.д.
0
Taguaje
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 4
16.12.2012, 01:53  [ТС] #3
Цитата Сообщение от vua72 Посмотреть сообщение
Потому что так устроен оператор cout, а когда вы пишите *p, вы имеет в виду p[0], когда *(p+1) - p[1] и т.д.
так а когда просто p
он что двигается по сылками и выводить весь массив?
0
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,677
16.12.2012, 01:55 #4
C++
1
char v[] = "Fdasda"
атоматически стал известен размер v

C++
1
char *p=v;
у указателя размер автоматически нельзя определить, откуда компилятору знать сколько выводить надо?
0
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
16.12.2012, 01:55 #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;
0
Croessmah
Эксперт CЭксперт С++
13205 / 7476 / 839
Регистрация: 27.09.2012
Сообщений: 18,374
Записей в блоге: 3
Завершенные тесты: 1
16.12.2012, 01:56 #6
Цитата Сообщение от vua72 Посмотреть сообщение
Потому что так устроен оператор cout
cout - это объект. Оператор в данном случае <<

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от Taguaje Посмотреть сообщение
напишите что делает программа при cout << p;
Вы ответы читаете? Или посты набираете?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,926
16.12.2012, 02:01 #9
Цитата Сообщение от Taguaje Посмотреть сообщение
напишите что делает программа при cout << p;
Выводит на экран "Fdasda".
0
Taguaje
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 4
16.12.2012, 02:02  [ТС] #10
все понял
спасибо)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2012, 02:02
Привет! Вот еще темы с ответами:

Выводится мусор при выводе массива в обратном порядке - C++
Дайте пожалуйста объяснение багу, высочившемуся у меня во время выполнения следующего задания: вывести массив из n элементов в обратном...

Добавляются лишние символы при выводе данных в поток - C++
Есть char buff; куда пишутся данные с сети. вывожу на печать: cout &lt;&lt;&quot;IMEI- &quot; &lt;&lt; &quot;--&quot; &lt;&lt; buff&lt;&lt;buff&lt;&lt;buff ...

Посторонние цифры при выводе в поток (перевод температур) - C++
#include &lt;iostream&gt; using namespace std; int main() { int ftemp; cout &lt;&lt; &quot;Vvedite temperaturu po Farengeitu: &quot;; cin...

Строки: почему выводится неверное количество символов? - C++
Почему выводит количество символов 507, хотя массив равен 500 символов #include &lt;iostream&gt; int main() { using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.12.2012, 02:02
Ответ Создать тему
Опции темы

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