Observei que algumas pessoas usam a seguinte notação para declarar variáveis de ponteiro.
(a) char* p;
ao invés de
(b) char *p;
Eu uso (b). Qual é o racional por trás da notação (a)? A notação (b) faz mais sentido para mim porque o ponteiro de caractere não é um tipo em si. Em vez disso, o tipo é o caractere e a variável pode ser um ponteiro para o caractere.
char* c;
Parece que existe um tipo char * e a variável c é desse tipo. Mas, na verdade, o tipo é char e * c (a localização da memória apontada por c) é desse tipo (char). Se você declarar várias variáveis ao mesmo tempo, essa distinção se torna óbvia.
char* c, *d;
Isso parece estranho. C e d são o mesmo tipo de ponteiros que apontam para um caractere. Neste desde o próximo parece mais natural.
char *c, *d;
Obrigado.
c++
c
pointers
coding-style
Keeda
fonte
fonte
char *t
pareça adequado, então possochar * t;
sim. No entanto, tenho vistochar* t;
também com frequência .char
e (a) mostra p é umpointer to a char
Respostas:
Bjarne Stroustrup disse:
Fonte: http://www.stroustrup.com/bs_faq2.html#whitespace
Eu recomendaria o último estilo porque na situação em que você está declarando vários ponteiros em uma única linha (seu 4º exemplo), ter o asterisco com a variável será o que você está acostumado.
fonte
int *p
significando: quandop
é desreferenciado, recebo umint
. Então, várias declarações separadas por,
faz sentido:int *p, *q, r
(quandop
ouq
é desreferenciado recebo umint
, quandor
é referenciado recebo umint
). Além disso, a sintaxe do ponteiro de função faz sentido:int (*f)()
(quandof
é desreferenciado e chamado recebo umint
). E isso faz sentido:int *p, (*f)()
.int*
. Para mim,int *p, (*f)()
não faz muito sentido, mas posso ver como seria para algumas pessoas em algumas situações.void*
(e não funciona para referências C ++).Eu pessoalmente prefiro colocar o
*
com o resto do tipoAs pessoas vão argumentar "mas então
char* p, q;
se torna enganoso", ao que eu digo, "então não faça isso".fonte
cout << *p;
. Então, por que não colocar a estrela antes dap
declaração*p
:? Na minha opinião, seria menos confuso.Não há diferença em como escrever. Mas se você quiser declarar dois ou mais ponteiros em uma linha, é melhor usar a variante (b), porque é claro o que você deseja. Olhe abaixo:
fonte
typedef
não é a melhor maneira "claro". Algumas pessoas podem preferir isso, mas é problemático se houver várias pessoas trabalhando com seu código. Se não estiver acostumadoPCHAR
, posso escrever algo comoPCHAR *p;
, que seria umchar**
e não o que pretendo. Em geral, se você quiser umchar**
, terá que escreverPCHAR*
ou definir um novo tipo, e então ele simplesmente começará a se tornar estúpido.O compromisso é
K&R usa
Depende de você, a menos que esteja seguindo um padrão de codificação - nesse caso, você deve seguir o que todo mundo faz.
fonte
char* p;
. é uma questão de estilo, não de convenção ou regras. para mim, faz mais sentido que p seja do tipochar*
, então, obviamente, o * deveria estar com o tipo.clang-format
qualquer maneira.É tudo uma questão de preferência, pessoalmente em projetos que vejo o char *, tendo a declarar vários ponteiros em linhas separadas. Não existe uma maneira "correta" real de fazer isso e tudo se resume à preferência. Alguns dizem que é mais fácil ler (a) enquanto outros dizem que (b) é mais fácil declarar mais variáveis do mesmo tipo na mesma linha.
Acho que (b) é mais comum e, em alguns casos, tenho visto
ou algo parecido com isto. De novo preferência. O que quer que você se sinta confortável ou qualquer projeto em que estou trabalhando, usarei (a menos que eu mesmo escreva, caso em que uso (a))
fonte