sirven que punteros puntero para los declaracion cadenas aritmetica c++ pointers language-design declaration

que - punteros c++ pdf



¿Por qué el puntero*de c++ se asocia a la variable declarada, no al tipo? (3)

La respuesta simple es: porque así es como C lo hace. Lo cual, por supuesto, solo plantea la pregunta: ¿por qué C lo hace de esta manera?

La filosofía original, a principios de C, es que la declaración sea una imagen exacta del uso. Así que cuando escribes:

int *p;

, está declarando que la expresión *p tiene el tipo int (y el compilador calcula el tipo real de p consecuencia).

Esto, por supuesto, dejó de ser verdad el día que C introdujo typedef , y más tarde la struct . Y cualquier parecido desapareció completamente con const (introducido por primera vez en C ++, luego actualizado en C), donde cosas como

int *const p;

no tienen relación con el uso. Pero para entonces, el dado estaba echado.

¿Por qué se diseñó C ++ de tal manera que la forma correcta de declarar dos int * s en la misma línea es

int *x, *y;

no

int* x,y;

Sé que algunas personas piensan que debería evitar cualquiera de las dos formas y declarar cada variable en su propia línea, pero me interesa saber por qué se tomó esta decisión de idioma.


Para mantener la compatibilidad con el código C, porque así es como funciona C

Bjarne hace un buen punto here :

La elección entre int* p; e int *p; no se trata de lo correcto e incorrecto, sino del estilo y el énfasis. C enfatiza expresiones; Las declaraciones a menudo se consideraban poco más que un mal necesario. C ++, por otro lado, tiene un gran énfasis en los tipos.

Un programador típico de C escribe int *p; y lo explica *p is what is the int sintaxis que enfatiza *p is what is the int , y puede apuntar a la gramática de la declaración C (y C ++) para argumentar la corrección del estilo. De hecho, el * se une al nombre p en la gramática.

Un programador typical C++ programmer escribe int* p; y explica que p is a pointer to an int tipo de énfasis p is a pointer to an int . De hecho, el tipo de p es int *. Claramente, prefiero ese énfasis y lo veo como importante para usar bien las partes más avanzadas de C ++.

Entonces, la motivación para este trabajo como este en C ++ es cómo funciona en C.

La motivación que funciona así en C es que, como se dijo anteriormente, C enfatiza las expresiones en lugar de los tipos.


Responder

Eso viene de "C" ("plain c", "pure c", lo que sea).

Cuando ya se ha declarado una variable de puntero, se usa así:

... *p = &x; *q = SomePointerFunc(); ....

Leí que los inventores originales de "c" querían que los programadores declararan variables de punteros con la misma sintaxis que se usan, con la estrella antes del identificador de variable :

... int *p; int *q; ...

Lo mismo ocurre con las matrices:

... x[5] = ''a''; y[77] = SomeItemFunc(); ... ... char x[5]; int y[100]; ...

Algunos profesores que tuve, insisten en declarar tipos para variables y funciones de esta manera (estrella cerca del identificador):

... int *p; int *q; ...

En lugar de esto (estrella junto al identificador de tipo):

... int* p; int* q; ...

Extra

En Java, y otros lenguajes, como C #, la declaración de matrices o punteros están al lado del tipo, dejando la variable o identificador de función solo, como este pseudocódigo:

*int p; *int q; char[5] x; int[100] y;

Prefiero esta técnica.

Aclamaciones.