пример кода:
char *array = "привет";
cout << array;
Почему выводится все слово, а не первая буква?
пример кода:
char *array = "привет";
cout << array;
Почему выводится все слово, а не первая буква?
Непонятно, почему вы ожидали получить один символ.
Ведь если бы указатель был не на char, а, скажем, на int, то вы получили бы не этот int, а численное значение самого указателя (в шестнадцатеричном виде):
int array[] = {1,2,3};
int *ptr = &array[0];
std::cout << ptr << '\n'; // `0x7ffdc12431dc`, а не `1`
(Вроде бы в стандарте не написано, как точно должны выводиться указатели, но на всех компиляторах, которые я видел, они выводятся как шестнадцатеричные числа.)
Для cout указатели на char - это особый случай. cout считает их указателями на начало строк, и выводит как строки.
*array(а лучшеarray[0]). – pavel Oct 09 '19 at 14:29strlen,strcpyи т.д.). Это, однако, не означает, что все эти функции работают только с "первой буквой". Поэтому не ясно, почему в этом конкретном случае вдруг возник вопрос о "первой букве". – AnT stands with Russia Oct 09 '19 at 14:33coutимеет несколько перегрузок: в случаеchar*он выводит символы, пока не встретит нулевой терминатор. – Alexander Petrov Oct 10 '19 at 15:58coutпередатьint*или любой другой отличный отcharуказатель - почему он не выводит массив чисел и т. п.? – Alexander Petrov Oct 10 '19 at 16:01cout". Вы передаете параметры в перегруженный оператор<<. И так реализован стандартный оператор<<. Его ручками именно так написали. Для типаchar *(точнееconst char *) реализована отдельная версия<<, которая выводит С-строку. С-строка - это не просто "массив символов", а несколько больше. А вот для типаint *не написали отдельного оператора. Можете сами его написать, если хотите. – AnT stands with Russia Oct 10 '19 at 16:08