Правильный способ объявления переменных указателя в 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 67

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))