Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2011, 13:51   #1
Gen_r_questions
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 81
По умолчанию указатели

Привет
Я не понимаю различия между
transport и transport[0]
transport и transport[0] это вроде указатели на motorcycle, а cout выводит разные значения
Код:
#include "stdafx.h"
#include "conio.h"
#include "string"
using namespace std;
int main(){
        string transport[4]={"motorcycle", "bike", "car", "plane"};
        cout << transport << endl;
        cout << transport[0] << endl;
}
Gen_r_questions вне форума Ответить с цитированием
Старый 13.02.2011, 14:19   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

имя массива это указатель на его первый элемент.
а array[0] это сам первый элемент.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.02.2011, 14:20   #3
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Идентификатор массива т.е. его имя transport - это указатель на первый элемент массива, для того, что бы получить значение указателя, нужно его разыменовать, т.е. написать *transport .
profi вне форума Ответить с цитированием
Старый 13.02.2011, 17:10   #4
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

cout << transport << endl; g++ вывел [motorcycle, bike, car, plane]
но вроде и совсем не обязан был этого делать, эта строка вроде не по стандарту?можно было ожидать адреса массива на выходе
alex_x_x вне форума Ответить с цитированием
Старый 13.02.2011, 18:38   #5
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Да, интересное поведение. А должен был просто адрес вывести.
У меня после компиляции g++ просто адрес выводит.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 13.02.2011 в 18:50.
Obey-Kun вне форума Ответить с цитированием
Старый 13.02.2011, 19:11   #6
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

ну по идее если массив символов - должен вывести все что в нем хранится вплоть до \0,
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 13.02.2011, 19:14   #7
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

не
во-первых, первый \0 там будет в первом элементе
во-вторых, он должен в любом случае адрес вывести
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 13.02.2011, 20:01   #8
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

вот оно
http://codepad.org/jPEUhnYJ
alex_x_x вне форума Ответить с цитированием
Старый 13.02.2011, 20:47   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
если массив символов
это char*
а у нас тип массива string*
(точнее имя массива имеет этот тип)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.02.2011, 21:07   #10
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
это char*
а у нас тип массива string*
(точнее имя массива имеет этот тип)
да он также выводит все статические массивы с int, char итп
gcc богат нестандартными расширениями

например setbase
Цитата:
Sets the basefield format flag to one of its possible values: hex, dec or oct depending on the value of the base parameter.
тем не менее gcc нормально и правильно выводит cout << std::setbase( 2 ) << 123;
хотя тот же msvc помню какойто бред выводил
alex_x_x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели GrihaI Общие вопросы C/C++ 11 06.05.2010 18:53
указатели в С++ Aleksa_ks Помощь студентам 3 27.04.2010 19:31
C++ указатели. tshen Помощь студентам 3 16.04.2010 22:00
Указатели(С++) Scarletred Помощь студентам 0 05.04.2010 22:50
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39