C++ Punteros
Aprender los punteros de C++ es a la vez simple e interesante. Mediante los punteros, se puede simplificar la ejecución de algunas tareas de programación en C++; además, hay algunas tareas, como la asignación de memoria dinámica, que no se pueden realizar sin punteros. Por lo tanto, si se desea ser un buen programador de C++, es muy necesario aprender los punteros.
Como usted sabe, cada variable tiene una ubicación de memoria, y cada ubicación de memoria define una dirección que se puede acceder mediante el operador ampersand (&), que representa una dirección en la memoria. Consulte el siguiente ejemplo, que mostrará la dirección de la variable definida:
Ejemplos
Cuando el código anterior se compila y ejecuta, produce los siguientes resultados:
var1 变量的地址: 0xbfebd5c0 var2 变量的地址: 0xbfebd5b6
A través del ejemplo anterior, hemos aprendido qué es una dirección de memoria y cómo acceder a ella. A continuación, veamos qué es un puntero.
¿Qué es un puntero?
Punteroes una variable cuyo valor es la dirección de otra variable, es decir, la dirección directa de una ubicación de memoria. Al igual que otras variables o constantes, debe declararlo antes de usar un puntero para almacenar la dirección de otra variable. La forma general de declarar una variable puntero es:
type *var-name;
Aquí,typees el tipo base del puntero, y debe ser un tipo de datos válido de C++.var-namees el nombre de la variable puntero. El asterisco * utilizado para declarar punteros es el mismo que el asterisco usado en la multiplicación. Sin embargo, en esta declaración, el asterisco se utiliza para indicar que una variable es un puntero. A continuación se muestran declaraciones de punteros válidas:
int *ip; /* 一个整型的指针 */ double *dp; /* 一个 double 型的指针 */ float *fp; /* 一个浮点型的指针 */ char *ch; /* 一个字符型的指针 */
El tipo de dato real del valor de todos los punteros, ya sea entero, flotante, carácter u otro tipo de dato, es el mismo: un número hexadecimal largo que representa una dirección de memoria. La única diferencia entre los punteros de diferentes tipos de datos es el tipo de dato de la variable o constante a la que apunta el puntero.
Uso de punteros en C++
Al usar punteros, se realizan con frecuencia las siguientes operaciones: definir una variable puntero, asignar la dirección de una variable al puntero y acceder al valor de la dirección disponible en la variable puntero. Esto se hace mediante el operador unario*que devuelve el valor de la variable ubicada en la dirección especificada por el operando. El siguiente ejemplo involucra estas operaciones:
Ejemplo
Cuando el código anterior se compila y ejecuta, produce los siguientes resultados:
Value of var variable: 20 Address stored in ip variable: 0xbfc601ac Value of *ip variable: 20
Detalles de los punteros en C++
En C++, hay muchos conceptos relacionados con los punteros; todos son simples, pero muy importantes. A continuación se enumeran algunos conceptos importantes relacionados con los punteros que todo programador de C++ debe tener claro:
| Concepto | Descripción |
|---|---|
| Puntero nulo en C++ | C++ admite punteros nulos. Un puntero NULL es una constante con valor cero definida en la biblioteca estándar. |
| Operaciones aritméticas con punteros en C++ | Se pueden realizar cuatro operaciones aritméticas con punteros: ++, --, +, - |
| Punteros vs arreglos en C++ | Los punteros y los arreglos tienen una relación estrecha. |
| Arreglo de punteros en C++ | Se pueden definir arreglos que se utilizan para almacenar punteros. |
| Puntero a puntero en C++ | C++ permite punteros que apuntan a punteros. |
| Pasar punteros a funciones en C++ | Pasar parámetros por referencia o por dirección para que los parámetros pasados se modifiquen en la función llamada. |
| Devolver punteros desde una función en C++ | C++ permite que una función devuelva un puntero a variables locales, variables estáticas y memoria asignada dinámicamente. |