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

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

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

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

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

Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив. - C++
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++. Условие:Реализовать 3 функции, каждая из которых принимает указатель на...

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив) - C++
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая как параметр получает указатель на...

Динамический массив и указатель на указатель - C++
Спасибо за внимание) Задача такова: нужно удалить элемент по индексу, при этом уменьшить сам массив на 1 (т.е. удалили элемент - уменьшился...

Как получить ссылку на указатель или указатель на указатель в массиве? - C++
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

Написать функцию принимающую массив и возвращающую указатель на динамический массив - C++
Написать функцию принимающую массив и возвращающую указатель на динамический массив содержащий первые n нaибольших чисел. Как сделать...

Что быстрее использовать, массив э-в, или указатель на массив э-в? - C++
уважаемые, что быстрее использовать, массив э-в, или указатель на массив э-в? или без разницы? С одной стороны обращается все к той же...

7
DU
1484 / 1130 / 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);
в этом случае вызовится другая ф-ия, которая выведет именно значение указателя.
0
2e1553ce
1 / 1 / 1
Регистрация: 16.12.2011
Сообщений: 47
25.12.2011, 01:03  [ТС] #3
мммммм
0
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 системе счисления.
0
2e1553ce
1 / 1 / 1
Регистрация: 16.12.2011
Сообщений: 47
25.12.2011, 01:09  [ТС] #5
Такое происходит только со строками (char)?
0
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 01:24 #6
Нет, еще есть void *, const void * и вроде еще буферы. На указатели других типов просто будет ругаться ошибками.

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

указатель на массив - C++
Добрый день, объясните как верно будет. например определим массив char array = {&quot;qaqaqaqqa&quot;} к примеру есть функция void primer(...

Указатель на массив - C++
Подскажите пожалуйста, как создать указатель на массив, если длина массива записана в переменной? Т.е проблема в том что в квадратных...

Указатель на массив - C++
Не могу разобраться в указателях. Допустим есть двумерный массив, выводятся поочереди 19 элементов. Если я в инструкции if поменяю...

Указатель на массив - C++
Есть такая структура struct Elem { char cos; Elem * next; Elem * prev; }; Elem * Head=NULL,*Tail=NULL;


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

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

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