C++: строка в стиле C, действующая как массив символов?
Привет всем, кто это читает. Я новичок в С++. У меня есть несколько концептуальных вопросов о C-струнах. Я узнал, что C-строка действует как массив из другого обсуждения стека, но меня смущает следующее:
Я знаю, что в С++ для массивов :
int int_arr[] = {1, 2, 3, 4, 5};
cout << int_arr << endl; // Address of first element of the array, prints an address
cout << *int_arr << endl; // Content of first element of the array, prints 1
// int_arr acts like &(int_arr[0]) in assignment, comparison, etc.
Я ожидал такого же поведения для C-string , но:
char c_str[] = "Hello";
cout << c_str << endl; // Prints "Hello"
cout << *c_str << endl; // Prints "H"
Это противоречит поведению массива.
Следующая установка имеет то же поведение, что и C-строка:
char *c_string = "Hello";
cout << c_string << endl; // Prints "Hello"
cout << *c_string << endl; // Prints "H"
Здесь есть два вопроса:
- Правильно ли, что C-строка не ведет себя как массив , и я должен помнить C-строку с ее собственным поведением? Если это массив, то почему в приведенном выше примере с массивами он ведет себя по-другому , возвращая не адрес, а целую строку?
- Является ли третий раздел кода просто еще одним способом настройки C-строки ? Он работает только тогда, когда он
char*
. ( Решено )