Указатель на тип char, нюансы

279
17 октября 2017, 03:29

Мне не понять

char *name[] = { "la la","la" };
cout << name << endl; // этот выдаёт адрес первого элемента
char *name1 = "la la";
cout << name1 << endl; // а этот самого "la la"

Почему первый вариант выдаёт адрес, а не полный строковый литерал "la la"? Ведь cout перегружен, так что вместо адреса выдаёт полное значение пока не встретит \0.

Answer 1

Потому что на самом деле name — это указатель на массив, а не указатель на char. Хотите вывести первый элемент массива — пишите

cout << name[0] << endl;
Answer 2

В случае char *name1, name1 — это указатель на char, т.е. строка, которая и выводится.

А в первом случае char *name[], name — это массив указателей на строки. Поэтому выводится адрес этого массива.

READ ALSO
Метавычисление типов в Boost MPL

Метавычисление типов в Boost MPL

У меня есть задача:

322
C++ компилятор не читает дробные числа [дубликат]

C++ компилятор не читает дробные числа [дубликат]

На данный вопрос уже ответили:

348
Стоит ли заменить подход std:thread на std::async?

Стоит ли заменить подход std:thread на std::async?

В проекте (многоагентная система для работы с потоком разнотиповых данных в реальном времени) используется многопоточность из стандартной...

250
Как считать массив из файла?

Как считать массив из файла?

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

545