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

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

Войти
Регистрация
Восстановить пароль
 
2e1553ce
1 / 1 / 1
Регистрация: 16.12.2011
Сообщений: 47
#1

указатель и массив - C++

25.12.2011, 00:52. Просмотров 346. Ответов 7
Метки нет (Все метки)

подскажите плс эти две строки эквивалентны?
C++
1
2
char* str="bla bla bla";
char str[]={"bla bla bla"};
Почему при выводе адреса 1 элемента(cout<<str) ниже выведет "bla bla bla" , а не
что то на подобие "ff1248" ?
C++
1
2
char* str="bla bla bla";
cout<<str
Потому что выводится массив?
АААААААААААААААААААААААААААААААААААААААААААААААААААА!!!!!

Добавлено через 19 часов 48 минут 57 секунд
Тоесть вся эта строка "blablabla" и есть 1 элемент?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.12.2011, 00:59     указатель и массив #2
cout<<str -
это вызов ф-ии
std::ostream& operator << (std::ostream& out, const char* str); реализация этой ф-ии такова, что она выводит строку.
если нужено вывести значение указателя, то его надо скастить например к const void*.
т.е.
cout<<static_cast<const void*>(str);
в этом случае вызовится другая ф-ия, которая выведет именно значение указателя.
2e1553ce
1 / 1 / 1
Регистрация: 16.12.2011
Сообщений: 47
25.12.2011, 01:03  [ТС]     указатель и массив #3
мммммм
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 01:04     указатель и массив #4
1) Нет, они не эквивалентны. В первом случае str будет указателем на первый символ строку. Во втором случае компилятор будет считать str за массив из 12 элементов.
Поэтому в первом случае ты можешь написать
C++
1
2
char *str = "abc";
str = "bnmjkl";
А во втором так не получится.
2) cout изначально воспринимает элемент char * как указатель на строку. И выводит ее.
Если требуется вывести адрес, то это делается так
C++
1
printf("%p", str); // Он выведет адрес в машинно-зависимом виде
Через cout делать сложнее. Я бы преобразовал указатель к типу unsigned int и вывел бы в 16 системе счисления.
2e1553ce
1 / 1 / 1
Регистрация: 16.12.2011
Сообщений: 47
25.12.2011, 01:09  [ТС]     указатель и массив #5
Такое происходит только со строками (char)?
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 01:24     указатель и массив #6
Нет, еще есть void *, const void * и вроде еще буферы. На указатели других типов просто будет ругаться ошибками.

Добавлено через 2 минуты
Поправка, для типов void * и const void * он выводит именно адрес в 16 сс.(Только что проверил)
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.12.2011, 01:25     указатель и массив #7
ну если для указателей других типов нет специального оператора <<, то будет вызван оператор << для void*/const void*, потому что все указатели неявно к ним кастятся. так что ошибок быть не должно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2011, 01:44     указатель и массив
Еще ссылки по теме:

Указатель и массив C++
C++ Массив и указатель
C++ Указатель на массив
Указатель на массив C++
C++ Указатель на массив

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

Или воспользуйтесь поиском по форуму:
2e1553ce
1 / 1 / 1
Регистрация: 16.12.2011
Сообщений: 47
25.12.2011, 01:44  [ТС]     указатель и массив #8
ясно , спасибо
Yandex
Объявления
25.12.2011, 01:44     указатель и массив
Ответ Создать тему
Опции темы

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