У меня есть код:указатель на C/C++
char* s="abc";
У меня есть вопрос, что тип данных переменной в этом коде?
- тип данных
s
являетсяint
- s является
string
?
Таким образом, если тип данные s
является int
, почему cout<<s
является "а"?
У меня есть код:указатель на C/C++
char* s="abc";
У меня есть вопрос, что тип данных переменной в этом коде?
s
является int
string
?Таким образом, если тип данные s
является int
, почему cout<<s
является "а"?
Тип s
- это то, что объявляется переменной, и ничего больше. Это указатель на char
, или char*
. Он указывает на первый элемент массива только для чтения char
, поэтому он должен действительно быть const char*
. Фактически, преобразование в char*
устарело в C++.
Тип данных: char *
(указатель на символ). Он внутренне содержит целое число (размер зависит от архитектуры процессора, на которую вы нацеливаетесь). Он отображается как «ABC», потому что оператор <<
перегружен для отображения указателей символов в виде строк. Если вы хотите увидеть целочисленное значение, добавьте его в void *
.
«abc» - это букваль, состоящая из трех символов a, b и c, за которыми следует нулевой ограничитель.
Он может быть назначен const char *. Вы также можете назначить его символу char *, но это опасно, поскольку вы не можете изменить содержимое литерала.
cout содержит перегрузку, которая будет отслеживать указатель ввода до тех пор, пока не достигнет нулевого терминатора; вывод символов.
Итак, s моделирует жало персонажей.
Давайте оценим. Если s
имел тип int
, когда его объявление содержало спецификатор типа int
или некоторое имя typedef (пользовательский псевдоним для int
), что эквивалентно int
. Например
int s;
или
typedef int MyPersonalType;
MyPersonalType s;
Точно так же, если s
имел тип std::string
он будет объявлен как
std::string s;
Ни первый, ни второй используется в объявлении s
, s
объявлен как
char* s;
Так что имеет тип char *
, который является указателем на символ.Кроме того s
инициализируется строкой буквального
char* s="abc";
В этом случае s
инициализируется адрес первого символа строки буквального.
Итак, когда вы используйте оператор
std::cout << s;
эта строка литерал outputed.
Возьмите в acccount, что эта запись
char* s="abc";
действует на C. В C++ вы должны указать также Классификатор константный
const char* s="abc";
, потому что строковые литералы являются неизменны.
Что такое 'C/C++'? –
Ничто в вашем примере не имеет типа 'int'. И у вас нет 'std :: string' в любом месте, у вас есть' char * 'и' const char [] 'literal – CoryKramer
Тип данных - это указатель. Я бы прочитал их. – marsh