vectores que punteros puntero matriz ejemplos constantes arreglos arreglo aritmetica c++

c++ - que - punteros y vectores en c



¿Es el nombre de la matriz un puntero constante en C++? (2)

Tengo una pregunta sobre el nombre de la matriz a

int a[10]

¿Cómo se define el nombre de la matriz en C ++? ¿Un puntero constante? ¿Se define de esta manera o simplemente podemos verlo así? ¿Qué operaciones se pueden aplicar sobre el nombre?


El estándar de C ++ define qué es una matriz y su comportamiento. Eche un vistazo en el índice. No es un puntero, constante o de otro tipo, y no es otra cosa, es una matriz.

Para ver una diferencia:

int a[10]; int *const b = a; std::cout << sizeof(a); // prints "40" on my machine. std::cout << sizeof(b); // prints "4" on my machine.

Claramente, a y b no son del mismo tipo, ya que tienen diferentes tamaños.

En la mayoría de los contextos, un nombre de matriz "decae" a un puntero a su propio primer elemento. Puedes pensar en esto como una conversión automática. El resultado es un valor de r, lo que significa que es "solo" un valor de puntero, y no se puede asignar, como cuando un nombre de función decae a un puntero de función. No significa que sea "const" como tal, pero no es asignable.

Así que una matriz "es" un puntero muy parecido a una función "es" un puntero a una función, o una larga "es" un int. Es decir, en realidad no lo es, pero puedes usarlo como tal en la mayoría de los contextos gracias a la conversión.


Un nombre de matriz no es un puntero constante; sin embargo, actúa como uno en muchos contextos (se convierte en uno a la vista) que para la mayoría de los propósitos es.

Desde 6.3.2.1/3 "Otros operandos / valores de L, matrices y designadores de funciones":

Excepto cuando es el operando del operador sizeof o el operador unario & , o si se utiliza un literal de cadena para inicializar una matriz, una expresión que tiene el tipo "matriz de tipo" se convierte en una expresión con el tipo "puntero a tipo" que apunta al elemento inicial del objeto de matriz y no es un lvalue.