c++ - sintaxis - Declarando punteros; asterisco a la izquierda o a la derecha del espacio entre el tipo y el nombre?
sintaxis de punteros en c (6)
Posibles duplicados:
¿Qué tiene más sentido: char * string o char * string? Declaraciones de puntero en C ++: colocación del asterisco
He visto versiones mixtas de esto en muchos códigos. (Por cierto, esto se aplica a C y C ++.) La gente parece declarar punteros de una de dos maneras, y no tengo idea de cuál es correcto, de si importa.
La primera forma de poner el asterisco junto al nombre del tipo, así:
someType* somePtr;
La segunda forma es poner el asterisco junto al nombre de la variable, así:
someType *somePtr;
Esto me ha estado volviendo loco durante algún tiempo. ¿Hay alguna forma estándar de declarar punteros? ¿Incluso importa cómo se declaran los punteros? He usado ambas declaraciones antes, y sé que al compilador no le importa de qué manera. Sin embargo, el hecho de que haya visto punteros declarados de dos maneras diferentes me lleva a creer que hay una razón detrás de esto. Tengo curiosidad si alguno de los métodos es más legible o lógico de alguna manera que me falta.
Cada forma que he visto es
TheType *myPointer
porque está declarando un POINTER de tipo TheType. Declaración similar
TheType myVar
estaría declarando una variable de instancia de tipo TheType.
También puede hacer esto claramente y tenerlo fácilmente legible
TheType myVar, *myPointer;
Creo que poner el asterisco junto al nombre de la variable es más claro.
Podría declarar erróneamente someType* one, two;
pensando que ambos son punteros pero solo la variable es un puntero; two
es solo un someType
. Declarar como someType *one, *two
evita este problema.
Es una cuestión de preferencia, y algo así como una guerra santa, al igual que el estilo de corsé.
El estilo
someType* somePtr;
está enfatizando el tipo de variable de puntero. Está diciendo, esencialmente, "el tipo de somePtr
es puntero-a- someType
".
El estilo
someType *somePtr
está enfatizando el tipo de datos apuntados. Está diciendo, esencialmente, "el tipo de datos apuntados por somePtr
es someType
".
Ambos significan lo mismo, pero depende de si el modelo mental de un programador dado al crear un puntero está "enfocado", por así decirlo, en los datos apuntados o en la variable del puntero.
Ponerlo en el medio (como someType * somePtr
) está tratando de evitar comprometerse con cualquiera de los dos.
La diferencia surgió porque C ++ agregó un sistema de tipo más fuerte además de C. El programador de CA por lo general piensa en términos de "valores", por lo que
int *pValue;
lee "la desreferencia de pValue es una int" mientras que un programador de C ++ piensa en "tipos", por lo que
int* pValue;
lee "el tipo pValue es puntero a int" El compilador no ve ninguna diferencia, por supuesto. Sin embargo, descubrirá que es el programador C quien insiste en la "semántica de valores" cuando programa en C ++.
No importa, es una preferencia personal.
Algunas personas les gusta mantener el tipo juntos:
int* p;
Otras personas dicen que debe ir junto a la variable debido a lo siguiente:
int *p, x;//declare 1 int pointer and 1 int
int *p, *x;//declare 2 int pointers.
Con el tiempo, pasará por alto esto y aceptará ambas variaciones.
No importa. Alguien ahora vendrá y cerrará la pregunta como un engañado, y alguien más mostrará cómo el int* a
way se rompe si usted declara múltiples variables en las mismas declaraciones mientras el int *a
refleja mejor la estructura sintáctica del código, y otro chico mostrará que Stroustrup prefiere el int* a
manera.
Muchas opiniones, pero no de manera "correcta" aquí.