Какой тип будет видеть cout при выводе. Символьные строки
При записи const char *str = "Hello"; и выводе cout << &str[1] << endl; какой тип будет видеть cout? char * ? Но почему именно в такой тип преобразовывается? Тот же вопрос и при записи char str1[] = { 'H', 'e', 'l', 'l', 'o', '\0' }; и том же выводе. Почему &str[1] обрабатывается именно с типом char * . И почему тогда при записи const char *str3[] = { "Hello", "World", "Test" }; и выводе cout << &str3[1] << endl; cout будет видеть тип char** ?? Вопрос именно по c++.
Ответы (1 шт):
const char *str = "Hello";
&str[1] - это адрес первого элемента, т.е. символа e. Тип str[1] -
const char, тип &str[1] - const char *, обрабатывается при выводе как строка.
char str2[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
Тип str2 - char[6], выражениt str2[1] имеет тип char, ну, а тип &str2[1] - char *, обрабатывается при выводе как строка.
const char *str3[] = { "Hello", "World", "Test" };
Массив указателей. Тип str3 - const char *[3]. Тип str3[1] - тип элемента массива, т.е. const char *. Массив состоит из трех элементов-указателей, так что &str3[1] - получение адреса второго элемента массива. Понятно, что его тип - после взятия адреса - const char * * - одна звездочка от типа элемента, вторая - от взятия адреса.