C++ Punteros vs Arreglos
Los punteros y los arreglos están estrechamente relacionados. De hecho, los punteros y los arreglos son intercambiables en muchos casos. Por ejemplo, un puntero que apunta al inicio de un arreglo puede acceder al arreglo mediante aritmética de punteros o indexación de arreglos. Vea el siguiente programa:
Ejemplo
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:
var[0]的内存地址为 0x7fff59707adc var[0] 的值为 10 var[1]的内存地址为 0x7fff59707ae0 var[1] 的值为 100 var[2]的内存地址为 0x7fff59707ae4 var[2] 的值为 200
Sin embargo, los punteros y los arreglos no son completamente intercambiables. Por ejemplo, vea el siguiente programa:
Ejemplo
Aplicar el operador de puntero * a var es perfectamente válido, pero modificar el valor de var es ilegal. Esto se debe a que var es una constante que apunta al inicio del arreglo y no puede usarse como valor l (lvalue).
Dado que un nombre de arreglo corresponde a un puntero constante, siempre que no se cambie el valor del arreglo, todavía se pueden usar expresiones en forma de puntero. Por ejemplo, la siguiente es una declaración válida que asigna 500 a var
*(var + 2) = 500;
La declaración anterior es válida y se compila correctamente porque var no cambia.
Otras extensiones