Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > УКАЗАТЕЛИ


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



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

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

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

Автор: Lotles 13.2.2011, 16:02
Мне почему то кажется что 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;) 
Как вы на это смотрите ?

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

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

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

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

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

Автор: bsa 14.2.2011, 18:24
Цитата(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"; //но такой код писать не надо!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)