2015-06-12 2 views
-3

У меня есть код:указатель на C/C++

char* s="abc"; 

У меня есть вопрос, что тип данных переменной в этом коде?

  1. тип данных s является int
  2. s является string?

Таким образом, если тип данные s является int, почему cout<<s является "а"?

+1

Что такое 'C/C++'? –

+1

Ничто в вашем примере не имеет типа 'int'. И у вас нет 'std :: string' в любом месте, у вас есть' char * 'и' const char [] 'literal – CoryKramer

+1

Тип данных - это указатель. Я бы прочитал их. – marsh

ответ

3

Тип s - это то, что объявляется переменной, и ничего больше. Это указатель на char, или char*. Он указывает на первый элемент массива только для чтения char, поэтому он должен действительно быть const char*. Фактически, преобразование в char* устарело в C++.

1

Тип данных: char * (указатель на символ). Он внутренне содержит целое число (размер зависит от архитектуры процессора, на которую вы нацеливаетесь). Он отображается как «ABC», потому что оператор << перегружен для отображения указателей символов в виде строк. Если вы хотите увидеть целочисленное значение, добавьте его в void *.

0

«abc» - это букваль, состоящая из трех символов a, b и c, за которыми следует нулевой ограничитель.

Он может быть назначен const char *. Вы также можете назначить его символу char *, но это опасно, поскольку вы не можете изменить содержимое литерала.

cout содержит перегрузку, которая будет отслеживать указатель ввода до тех пор, пока не достигнет нулевого терминатора; вывод символов.

Итак, s моделирует жало персонажей.

1

Давайте оценим. Если 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"; 

, потому что строковые литералы являются неизменны.

Смежные вопросы