Правильный способ объявления переменных указателя в C / C++ [закрыто]
я заметил, что некоторые люди используют следующие обозначения для объявления переменных указатель.
(a) char* p;
вместо
(b) char *p;
я использую (b). Что является рациональным за обозначением (А)? Нотация (b) имеет для меня больше смысла, потому что указатель символов сам по себе не является типом. Вместо этого тип является символом, а переменная может быть указателем на символ.
char* c;
похоже, что есть тип char* и переменная c этого типа. Но на самом деле тип-char и *c (Место памяти, указанное c) имеет этот тип (char). Если вы объявляете сразу несколько переменных, это различие становится очевидным.
char* c, *d;
это выглядит странно. И c, и d-это те же указатели, которые указывают на символ. В этом, так как следующий выглядит более естественно.
char *c, *d;
спасибо.
5 ответов:
Бьярн Страуструп сказал:
выбор между " int* p;" и "int *p;" не о правильном и неправильном, а о стиле и акценте. С подчеркнутыми выражениями; заявления часто считались не более чем необходимым злом. C++, с другой стороны, имеет большой акцент на типах.
"типичный программист C "пишет" int *p; "и объясняет, что" *p - это то, что является синтаксисом int", и может указывать на грамматику объявления C (и C++), чтобы спорить за правильность стиля. Действительно, * связывается с именем p в грамматике.
"типичный программист C++ "пишет" int* p; "и объясняет, что" p-указатель на тип подчеркивания int". Действительно, тип p-int*. Я явно предпочитаю этот акцент и считаю его важным для использования более продвинутых частей C++.
Источник:http://www.stroustrup.com/bs_faq2.html#whitespace
Я бы рекомендовал последний стиль потому что в ситуации, когда вы объявляете несколько указателей в одной строке (ваш 4-й пример), наличие звездочки с переменной будет тем, к чему вы привыкли.
Я лично предпочитаю место
*
с остальной частью типаchar* p; // p is a pointer to a char.
люди будут спорить "а потом
char* p, q;
вводит в заблуждение", на что я говорю:"так что не делайте этого".
нет никакой разницы, как писать. Но если вы хотите объявить два или более указателей в одной строке, лучше использовать вариант (b), потому что ясно, что вы хотите. Смотрите ниже:
int *a; int* b; // All is OK. `a` is pointer to int ant `b` is pointer to int char *c, *d; // We declare two pointers to char. And we clearly see it. char* e, f; // We declare pointer `e` and variable `f` of char type. // Maybe here it is mistake, maybe not. // Better way of course is use typedef: typedef char* PCHAR; PCHAR g, h; // Now `g` and `h` both are pointers. // If we used define construction for PCHAR we'd get into problem too.
компромисс
char * p;
K & R использует
char *p;
это зависит от вас, если вы не следуете стандарту кодирования-в этом случае вы должны следовать тому, что делают все остальные.
это все вопрос предпочтения, лично в проектах, которые я вижу char* я склонен объявлять несколько указателей на отдельных строках. Не существует "правильного" способа сделать это, и все это сводится к предпочтению. Некоторые говорят, что легче читать (a), в то время как другие говорят, что (b) легче объявлять больше переменных одного и того же типа в одной строке.
Я нахожу (b) более распространенным, и в некоторых случаях я видел
char * a;
или что-то вроде этого. Опять предпочтение. Независимо от того, что вам удобно или какой проект, над которым я работаю, я буду использовать (если я не напишу его сам, и в этом случае я использую (a))