2013-02-26 4 views

ответ

7

нет.

Но есть разница между

const char* name = "hello", something = "else"; 

, который не будет работать, в то время как

const char *name = "hello", *something = "else"; 

РЕКОМЕНДУЕМЫМ

+0

В чем разница между ними вы можете объяснить? – user1334858

+0

const char * a = "hello", something = "else"; это объявляет как указатель на тип char и что-то вроде char. вы можете исправить это, выполнив «typedef char * pchar», который позволит: pchar a = «hello», something = «else»; – Dmitry

2

Нет, нет разницы, и оба объявления эквивалентны.

Обратите внимание, что C стиль, как правило, объявлять объекты указатель таким образом:

T *a; 

в то время как стиль C++, как правило, объявлять объекты указатель таким образом:

T* a; 
0

Это в основном дело вкуса.

Я лично использую const char* name, потому что я хочу, чтобы было ясно, что этот тип является указателем (а char*), но многие люди думают, что более правильным является использование const char *name, чтобы показать, что *name является указателем (для типа char)

1

Оба анализируются как const char (*name) = "name";. * привязан к декларатору, а не спецификатору типа.

Объявления в C и C++ основаны на типах выражений, а не объектов. Если у вас есть указатель на некоторый тип T, и вы хотите получить доступ к значению на который указывает на, то почтительное указатель:

x = *p; 

Типом выражения*p является T, поэтому объявление указателя является

T *p; 

В вашем случае, name указывает на значение, которое начинается char строковым. Если мы хотим, чтобы добраться до значения символа 'n', мы бы написать что-то вроде

const char start = *name; // assigns 'n' to start 

Таким образом, тип выражения*name является const char, поэтому мы обычно пишут Декларацию

const char *name; 

Потому что как синтаксис объявления C, пробелы вокруг маркера * не имеют значения.Вы можете написать это как

const char *name; 
const char* name; 
const  char   *       name; 

или какая-либо другая комбинация. Я и многие другие предпочитают первую форму, потому что она точно отражает синтаксис объявления. Есть и другие, которые предпочитают вторую форму, хотя она представляет собой слегка вводящий в заблуждение вид синтаксиса, поскольку он подчеркивает тип name.

Любой, кто претендует на третью форму, либо троллинг, либо сумасшедший.

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