Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> УКАЗАТЕЛИ 
:(
    Опции темы
GQU
Дата 13.2.2011, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 13.2.2011

Репутация: нет
Всего: нет



Привет
Я не понимаю различия между
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;
}



PM MAIL   Вверх
KaraKum
Дата 13.2.2011, 15:42 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Имя массива - это указатель на его первый элемент.
Поэтому в первом случае печатается адрес первого элемента в памяти, а во втором случае сам этот элемент.

Добавлено через 2 минуты и 55 секунд
Операция "[]" - это, по сути, смещение относительно начала и разыменование получившегося указателя.
В приведённом примере получить значение на, например, третий элемент можно с помощью указателя вот так:
Код

cout << transport[sizeof(string) * 3];
//или
cout << *(transport + (sizeof(string) * 3));

PM MAIL WWW   Вверх
Lotles
Дата 13.2.2011, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 6.4.2010

Репутация: нет
Всего: нет



Мне почему то кажется что transport[0] это не сам первый элемент, а указатель на motorcycle; по форуму полазил нашел вот
http://forum.vingrad.ru/forum/topic-306392.html
те 
Код

char* str[2]={"111","222"};
str[0] - это char*

Просто когда cout выводит значение указателя на массив строк, то для того чтобы легче их было выводить выводится строка(motorcycle), а не данные по указателю те (в нашем случае m)( cout << transport[0] << endl;) 
Как вы на это смотрите ?

Это сообщение отредактировал(а) Lotles - 13.2.2011, 16:06
PM MAIL Skype   Вверх
KaraKum
Дата 13.2.2011, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Цитата(Lotles @  13.2.2011,  17:02 Найти цитируемый пост)
Мне почему то кажется

str - здесь является массивом элементов типа char*, поэтому str[0] - является тоже char*.
str является типом char**.

Это сообщение отредактировал(а) KaraKum - 13.2.2011, 16:05
PM MAIL WWW   Вверх
Lotles
Дата 13.2.2011, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 6.4.2010

Репутация: нет
Всего: нет



Разобрался, наконец то), спасибо, почему то раньше думал подобные выражения 
Код

char* transport[4]={"motorcycle", "bike", "car", "plane"};

transport, имеют тип char*, как и transport[0]

Это сообщение отредактировал(а) Lotles - 13.2.2011, 16:19
PM MAIL Skype   Вверх
bsa
Дата 14.2.2011, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Lotles @ 13.2.2011,  16:14)
Разобрался, наконец то), спасибо, почему то раньше думал подобные выражения 
Код

char* transport[4]={"motorcycle", "bike", "car", "plane"};

transport, имеют тип char*, как и transport[0]

в данном случае ты допустил ошибку (компиляторы для совместимости со старыми программами не ругаются), массив должен быть const char *transport[4].

Добавлено через 2 минуты и 50 секунд
KaraKum, у тебя ошибка в том, что ты забыл арифметику указателей. Почитай про нее еще разик.
Код
string arr[10];
arr[5] = "111";
//тоже самое что и 
*(arr + 5) = "111";
//или
5[arr] = "111"; //но такой код писать не надо!!!

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0831 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.