c - tag - jstl if else tutorialspoint
Diferencia entre char*var; y char*var;? (1)
No hay diferencia en este caso. Sin embargo, deberías preferir char *var;
.
Esto se debe a que el *
está asociado más estrechamente con el nombre de la variable y no es parte del tipo base . Por ejemplo, si haces esto:
char* a, b;
Lo que tienes es a
, a point-to- char
, b
, a char
. ¡Esto es confuso! Dado que el carácter *
está más cerca de la palabra clave char
, esperamos que los tipos de ambas variables sean punteros a caracteres, pero el *
realidad está asociado solo con a
. (Esto es similar a char a[10], b;
como lo señala teppic en los comentarios; el especificador [10]
también está asociado con a
, y por lo tanto solo a
será una matriz).
La declaración correcta sería:
char *a, *b;
Poner el especificador *
más cerca de la variable significa que es fácil ver lo que está sucediendo cuando pretende que una variable sea un puntero y la otra no:
char *a, b;
En este caso, es obvio que b
no estaba destinado a ser un puntero. En el ejemplo original ( char* a, b;
), no sabemos si el programador pretende que b
sea un puntero. Para pedir prestado a Douglas Crockford, todo lo que sabemos es que el programador es incompetente.
A algunas personas les gusta poner un espacio antes y después del *
:
char * a, * b;
Esto se ve afectado por el mismo problema ilustrado anteriormente: si b
no es un puntero, la declaración ( char * a, b;
) también puede generar incertidumbre sobre la intención del programador. Por lo tanto, sugiero no colocar un espacio entre el *
y el nombre de la variable 1 .
De cualquier manera que lo mires, char* var;
Debe ser tratado como mal estilo. Es gramaticalmente correcto de acuerdo con la especificación del lenguaje, pero conduce a un código ilegible porque parece indicar que el especificador *
es parte del tipo compartido por todas las variables en la misma declaración, cuando no lo es. (Es similar a escribir una función compleja en la misma línea; funciona, pero es una mala idea. Hay casos en los que la legibilidad y la capacidad de mantenimiento sustituyen a las preferencias estilísticas personales, y este es uno de ellos).
1 Personalmente, prefiero poner un espacio después del *
solo cuando se trata de valores de retorno de función:
char * foo();
Esto no es ambiguo: es una función que devuelve un puntero a char
.
char *foo();
¿Se refería el programador a una función que devuelve un puntero a char
, o quería crear un puntero a una función que devuelve char
? El lenguaje resolverá esto como idéntico al otro prototipo, pero nuestro objetivo es la legibilidad, y eso significa transmitir exactamente lo que queremos decir a los humanos , no solo al compilador.
Esta pregunta ya tiene una respuesta aquí:
Solo me pregunto si hay alguna diferencia entre:
char* var;
char *var;
¿O es solo una cuestión de preferencia (espacio)?