Duplicatas possíveis:
O que faz mais sentido – char * string ou char * string? Declarações de ponteiro em C ++: posicionamento do asterisco
Eu vi versões mistas disso em muitos códigos. (A propósito, isso se aplica a C e C ++.) As pessoas parecem declarar pointers de duas maneiras, e eu não tenho idéia de qual delas é correta, se é que isso importa.
A primeira maneira é colocar o asterisco ao lado do nome do tipo, assim:
someType* somePtr;
A segunda maneira é colocar o asterisco ao lado do nome da variável, assim:
someType *somePtr;
Isso tem me deixado louco por algum tempo agora. Existe alguma maneira padrão de declarar pointers? Será que importa como os pointers são declarados? Eu usei ambas as declarações antes, e sei que o compilador não se importa com o que é. No entanto, o fato de ter visto pointers declarados de duas maneiras diferentes me leva a acreditar que há uma razão por trás disso. Estou curioso para saber se algum dos methods é mais legível ou lógico de alguma forma que estou perdendo.
É uma questão de preferência e um pouco de guerra santa, assim como o estilo de cinta.
O estilo
someType* somePtr;
está enfatizando o tipo da variável do ponteiro. Está dizendo, essencialmente, “o tipo de somePtr
é pointer-to- someType
“.
O estilo
someType *somePtr
está enfatizando o tipo dos dados apontados. Está dizendo, essencialmente, “o tipo de dado apontado por somePtr
é someType
“.
Ambos significam a mesma coisa, mas depende se o modelo mental de um determinado programador ao criar um ponteiro é “focalizado”, por assim dizer, nos dados apontados ou na variável do ponteiro.
Colocá-lo no meio (como someType * somePtr
) está tentando evitar se comprometer com qualquer um.
Não importa. Alguém virá agora e encerrará a questão como um dupe, e outra pessoa mostrará como o int* a
caminho se rompe se você declarar múltiplas variables nas mesmas declarações enquanto o int *a
maneira reflete melhor a estrutura sintática do código, e outro cara mostrará que a Stroustrup prefere o int* a
way.
Muitas opiniões, mas nenhuma maneira “certa” aqui.
Não importa, é uma preferência pessoal.
Algumas pessoas gostam de manter o tipo em conjunto:
int* p;
Outras pessoas dizem que deve ir ao lado da variável devido ao seguinte:
int *p, x;//declare 1 int pointer and 1 int int *p, *x;//declare 2 int pointers.
Com o tempo, você simplesmente ignorará isso e aceitará as duas variações.
A diferença surgiu porque o C ++ adicionou um sistema de tipos mais forte em cima do C. O programador AC geralmente pensa em termos de “valores”,
int *pValue;
lê “a desreferencia do pValue é um int” enquanto que um programador C ++ pensa em “tipos” assim
int* pValue;
lê “o tipo pValue é ponteiro para int” O compilador não vê nenhuma diferença em todos os cursos. No entanto, você descobrirá que é o programador C que insiste em “semântica de valor” ao programar em C ++.
Eu acho que colocar o asterisco ao lado do nome da variável é mais claro.
Você pode erroneamente declarar someType* one, two;
pensando que ambos são pointers, mas apenas a variável é um ponteiro; two
é apenas um someType
. Declarando como someType *one, *two
evita esse problema.
Todo jeito que eu vi é
TheType *myPointer
porque você está declarando um POINTER do tipo TheType. Declaração semelhante
TheType myVar
seria declarar uma variável de instância do tipo TheType.
Além disso, você pode claramente fazer isso e tê-lo facilmente legível
TheType myVar, *myPointer;