Почему чтоб вывести элементы числового массива , то это надо выполнять через цикл , а чтоб вывести строку , то можно написать cout << название строки и все ? Вот пример:
cout <<string; , почему тут выводится полностью слово HI , в то время как если числовой массив так же вывести , то выводится просто адрес первого элемента массива
string и char* по стандарту являются текстовыми строками, поэтому все операторы и функции вывода на stdout уже включают в себя цикл для "печати" всей строки целиком.
Числовые массивы обычно не содержат информацию для интерпретации их как ряда чисел (исключение - учебные цели), а если и содержат то требуют тщательных методов форматирования (например пробел между числами или каждое в новой строке или построение таблицей и т.д.), поэтому стандарт отдает интерпретацию числовых массивов на откуп программисту.
Потому что для строки всегда известна или может быть подсчитана ее длина, а для обычных массивов - необязательно. В функцию, например, передается только указатель на начало массива.
При выводе массива символов (строки) с помощью `cout << string;` происходит следующее:
1. Оператор `<<` для `cout` имеет специальную перегрузку для работы с типом `const char*`.
2. Когда вы передаете массив символов в `cout`, он неявно преобразуется в указатель на первый элемент массива.
3. Эта перегрузка оператора знает, что нужно выводить символы последовательно, пока не встретится нулевой символ (`'\0'`), который означает конец строки.
Поэтому в примере:
char string[] = {'H', 'I', '\0'};
cout << string;
Выводится "HI", так как `cout` продолжает выводить символы до тех пор, пока не встретит нулевой символ.
Вывод числовых массивов
С числовыми массивами ситуация иная:
1. Для числовых типов нет специальной перегрузки оператора `<<`, которая бы интерпретировала массив как последовательность чисел.
2. При попытке вывести числовой массив, например `int arr[] = {1, 2, 3};`, выражение `arr` преобразуется в указатель на первый элемент массива.
3. `cout` выводит этот указатель как адрес в памяти, а не содержимое массива.
Почему так сделано
1. **Историческая причина**: В C строки представлялись как массивы символов, заканчивающиеся нулевым символом. Эта концепция была унаследована C++.
2. **Эффективность**: Для строк это удобно, так как часто нужно выводить весь текст. Для числовых массивов такой подход менее универсален, так как может потребоваться выводить только часть массива или в особом формате.
3. **Гибкость**: Для числовых массивов предпочтительнее использовать циклы, что дает больше контроля над форматом вывода и позволяет обрабатывать массивы произвольной длины.
Чтобы вывести числовой массив, вам нужно использовать цикл:
int arr[] = {1, 2, 3};
for (int i = 0; i < 3; ++i) {
cout << arr << " ";
}
Это дает больше гибкости при работе с числовыми данными.
в с и с++ специально сделали такую функцию вывода удобную, чтобы людям для вывода текста не пришлось писать все элементы массива. Так же ты можешь для массива символов просто вписать слово и оно заполнится как надо char string[ ]={'Hello World!'};