Noté que algunas personas usan la siguiente notación para declarar variables de puntero.
(a) char* p;
en vez de
(b) char *p;
Yo uso (b). ¿Qué es lo racional detrás de la notación (a)? La notación (b) tiene más sentido para mí porque el puntero de carácter no es un tipo en sí mismo. En cambio, el tipo es carácter y la variable puede ser un puntero al carácter.
char* c;
Parece que hay un tipo char * y la variable c es de ese tipo. Pero, de hecho, el tipo es char y * c (la ubicación de memoria señalada por c) es de ese tipo (char). Si declara varias variables a la vez, esta distinción se vuelve obvia.
char* c, *d;
Esto se ve raro. Tanto c como d son el mismo tipo de punteros que apuntan a un carácter. En esto ya que el próximo parece más natural.
char *c, *d;
Gracias.
c++
c
pointers
coding-style
Keeda
fuente
fuente
char *t
ve bien, así que puedo hacerlochar * t;
. Sin embargo, también lo he visto con frecuenciachar* t;
.char
y (a) muestra p es unpointer to a char
Respuestas:
Bjarne Stroustrup dijo:
Fuente: http://www.stroustrup.com/bs_faq2.html#whitespace
Recomendaría el último estilo porque en la situación en la que está declarando varios punteros en una sola línea (su cuarto ejemplo), tener el asterisco con la variable será lo que está acostumbrado.
fuente
int *p
decir: cuandop
se desreferencia, obtengo unint
. Entonces, múltiples declaraciones separadas por tienen,
sentido:int *p, *q, r
(cuandop
oq
se desreferencia, obtengo unaint
, cuandor
se hace referencia, obtengo unaint
). Además, la sintaxis del puntero de función tiene sentido:int (*f)()
(cuandof
se desreferencia y se llama, obtengo unint
). Y esto tiene sentido:int *p, (*f)()
.int*
. Para mí,int *p, (*f)()
no tiene mucho sentido, pero puedo ver cómo sería para algunas personas en algunas situaciones.void*
(y no funciona en absoluto para referencias de C ++).Yo personalmente prefiero colocar el
*
con el resto del tipo.La gente argumentará "pero luego se
char* p, q;
vuelve engañosa", a lo que yo digo, "así que no hagas eso".fuente
cout << *p;
. Entonces, ¿por qué no poner la estrella antesp
durante la declaración*p
:? En mi opinión, sería menos confuso.No hay diferencia en cómo escribir. Pero si desea declarar dos o más punteros en una línea, es mejor usar la variante (b), porque está claro lo que desea. Mira abajo:
fuente
typedef
no es una mejor manera "por supuesto". Algunas personas pueden preferirlo, pero es problemático si hay varias personas trabajando con su código. Si no estoy acostumbradoPCHAR
, podría escribir algo comoPCHAR *p;
, que sería unchar**
y no lo que pretendo. En general, si quieres unchar**
, tendrías que escribirPCHAR*
o definir un nuevo tipo, y luego comienza a volverse estúpido.El compromiso es
Usos de K&R
Depende de usted, a menos que esté siguiendo un estándar de codificación; en ese caso, debe seguir lo que hacen los demás.
fuente
char* p;
. es una cuestión de estilo, no de convenciones o reglas. para mí tiene más sentido que p sea de tipochar*
, por lo que obviamente el * debería estar con el tipo.clang-format
todos modos.Todo es una cuestión de preferencia, personalmente en proyectos en los que veo el carácter * Tiendo a declarar varios punteros en líneas separadas. No existe una forma "correcta" real de hacer esto y todo se reduce a las preferencias. Algunos dicen que es más fácil de leer (a) mientras que otros dicen que (b) es más fácil declarar más variables del mismo tipo en la misma línea.
Encuentro que (b) es más común, y en algunos casos he visto
o algo como esto. De nuevo preferencia. Lo que sea con lo que se sienta cómodo o cualquier uso del proyecto en el que estoy trabajando, lo usaré (a menos que lo escriba yo mismo, en cuyo caso uso (a))
fuente