Я пытаюсь понять взаимосвязь между строками, массивами и указателями.
В книге, которую я читаю, есть программа, в которой она инициализирует переменную следующим образом:
char* szString= "Name";
То, как я это понимаю, заключается в том, что строка в стиле C представляет собой просто массив символов. Массив - это просто сокращенная версия обращения к указателю (который сохраняет первое значение массива) и смещение. То есть
array[5]
фактически возвращает то, что оценивается из выражения *(array+5)
.
Итак, из моего понимания и тестирования szString фактически инициализируется как указатель, который указывает на первый адрес массива, хранящего "Имя". Я могу это сделать, потому что вывод:
cout << *szstring;
- символ "N".
Мое понимание утверждения
cout << szstring;
вывод символов "Имя" означает, что метод cout интерпретирует аргумент szstring как строковый тип и выводит все символы до символа NUL. С другой стороны, для аргумента *szstring
используется другая версия этого метода, которая поддерживает строки в стиле C.
Поэтому, если я могу инициализировать указатель типа char для обращения к первому элементу в массиве символов (строка стиля C), почему я не могу инициализировать указатель типа int на первый элемент в массиве целые числа:
int* intArray = {1,2,3};