La siguiente declaración en C:Sintaxis del puntero en C: ¿por qué * solo se aplica a la primera variable?
int* a, b;
declarará a
como tipo int*
y b
como tipo int
. Soy muy consciente de esta trampa, pero lo que quiero saber es por qué funciona de esta manera. ¿Por qué no declara también b
como int*
, como la mayoría de las personas esperaría intuitivamente? En otras palabras, ¿por qué se aplica *
al nombre de la variable, en lugar del tipo?
Claro que podría escribir de esta manera a ser más coherente con la forma en que realmente obras:
int *a, b;
Sin embargo, yo y todos los que he hablado pensar en términos de una es de tipo " puntero a int ", en lugar de a es un puntero a algunos datos y el tipo de esos datos es" int ".
¿Fue simplemente una mala decisión de los diseñadores de C o hay alguna buena razón por la cual se analiza de esta manera? Estoy seguro de que la pregunta ha sido respondida antes, pero parece que no puedo encontrarla usando la búsqueda.
Para ser honesto, si el lenguaje C hiciera que el '*' modifique el tipo, la gente preguntaría "¿por qué' int * a, b; 'no me da un puntero y un entero?". – bta
@bta, sí, lo haríamos, pero creo que habría confundido a menos personas. De todos modos, el punto es no discutir sobre la decisión que se tomó hace 40 años, es solo para entender si hay razones para eso que no conozco. – EMP
Es posible que desee leer esto http://c-faq.com/decl/charstarws.html – Amarghosh