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*. ( Решено )

0 ответов

Другие вопросы по тегам