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

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

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

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

25.12.2011, 00:52. Просмотров 354. Ответов 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 элемент?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2011, 00:52     указатель и массив
Посмотрите здесь:

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

Указатель на массив - C++
Здравствуйте , подскажите пожалуйста , есть функция , вопрос заключается в указателе мне нужно передать массив в функцию через указатель (...

Указатель и массив - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main () { setlocale (0,&quot;&quot;); int *a,size; cout &lt;&lt;...

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

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

Массив и указатель - C++
При компиляции кода, приведенного ниже, вывод происходит со второго числа. Почему? int mass = {1, 2, 3, 4, 5, 6}; int *pmass = mass; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1481 / 1057 / 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
1481 / 1057 / 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++
Добрый день, объясните как верно будет. например определим массив char array = {&quot;qaqaqaqqa&quot;} к примеру есть функция void primer(...

Указатель на массив - C++
объясните пожалуйста что я тут делаю: char b; char* Buffer = &amp;b; Buffer = &quot;123&quot;; и почему у меня после этого в char b...

Указатель на массив - C++
Скажите, почему этот код нельзя скомпилировать? double a; double *pa = &amp;a; // !!!!! double *pa_2...

указатель на двумерный массив - C++
Делая игру морской бой, я столкнулся с 1-ой проблемой: void place_ships(char &amp;(&amp;(map+13)+29)) //или (char **map) или (char &amp;map) или...


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

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

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