Punteros C/C++ de 0 a 99 (explicación detallada)

Tabla de contenido

1. Comprensión básica de los punteros.

2. Uso básico de punteros.

3. ¿Por qué utilizar punteros?

4. La conexión entre punteros y matrices.

5. Uso ampliado de punteros

1) matriz de punteros

2) puntero de matriz

3) Puntero de función·

Estructura: tipo de retorno (*p) (parámetro 1, parámetro 2);

Ejemplo: int (*add)(int a,int b) =add; (add representa la función de suma y el nombre de la función es la dirección de la función)

¿Cuál es el uso de los punteros de función? Los punteros de función pueden simplificar una gran cantidad de código y hacer que el programa sea más robusto. Puedes pensar en ello. El uso de una plantilla de puntero de función puede adaptarse a funciones con diferentes funciones siempre que el valor de retorno y los parámetros sean lo mismo, reduciendo en gran medida el código duplicado.

6) Suplementos a sizeof y stelen


1. Comprensión básica de los punteros.

       Todos los datos se almacenarán en la computadora. La mayoría de las veces solo necesitamos parte de los datos, entonces, ¿cómo podemos encontrar esos datos con precisión? En este momento, necesitamos algunos números para encontrar los datos, como los números en nuestras tarjetas de identificación. , en la computadora, cada byte tiene su propio número y se utilizan punteros para almacenar estos números de dirección.

2. Uso básico de punteros.

      La estructura del puntero de primer nivel es: (tipo) + (*) + (nombre), por ejemplo: int * pa, este es un puntero de primer nivel de tipo int, al desreferenciarlo se puede obtener el contenido en el espacio señalado por el puntero. El puntero A de segundo nivel almacena la dirección de un puntero de primer nivel. Por ejemplo: int * *paa =&pa; al desreferenciarlo una vez se puede obtener el contenido señalado por el puntero de primer nivel. Una vez puede obtener el contenido señalado por el puntero de primer nivel, etc. Puede comprender los punteros de nivel tres y cuatro.

3. ¿Por qué utilizar punteros?

     En primer lugar, el uso más común de punteros es cuando se pasan parámetros a funciones. Como todos sabemos, cuando se pasan parámetros de un tipo de datos, la mayoría de ellos se copian. Los cambios en la función no pueden afectar los parámetros reales en otras funciones, y debido a que los punteros son diferentes de los demás, el puntero es la esencia (dirección), siempre que se pase la dirección del parámetro real y la dirección se encuentre a través del puntero del parámetro formal, la operación puede evitar el problema de no poder cambio debido a la copia. En segundo lugar, los punteros pueden realizar operaciones más precisas con los datos y pueden realizar operaciones con bytes mediante conversión forzada. Los punteros también pueden simplificar una gran cantidad de código, y estas ventajas se sentirán cuando los usemos en el futuro. Hay muchas otras ventajas que no voy a enumerar una por una, si estás interesado puedes encontrar información online.

4. La conexión entre punteros y matrices.

        La conexión entre matrices y punteros está indisolublemente ligada. La esencia de una matriz es un puntero. El nombre de una matriz es la dirección del primer elemento. Los punteros también se pueden expresar en forma de [], y las matrices también se pueden expresar en forma de punteros * (arr +i) expresado en la forma. A continuación, mostraré algunas conversiones y correspondencias entre matrices y punteros.

int *arreglo = int arreglo[ ]

int (*p)[ ] = int arreglo[ ] [ ]

5. Uso ampliado de punteros

1) matriz de punteros

Estructura: int *p[ ]

La esencia de una matriz de punteros sigue siendo una matriz. Su propósito se puede utilizar para almacenar punteros para facilitar su uso, como

int *pa=NULL;
int *pb=NULL;
int *pc=NULL;
int *arr[]={pa,pb,pc};

2) puntero de matriz

Estructura: int (*p)[ ]

La esencia de un puntero de matriz es un puntero. Parece que la estructura es la misma que la de una matriz de punteros, pero no olvides que [] y * tienen prioridades diferentes. La p del puntero de matriz se combina con [] primero, mientras que la matriz de punteros se combina con * primero. Las matrices de punteros pueden almacenar direcciones de matrices de varios dígitos, como matrices bidimensionales, y se pueden extraer fácilmente, por ejemplo:

3) Puntero de función·

Estructura: tipo de retorno (*p) (parámetro 1, parámetro 2);

Ejemplo: int (*add)(int a,int b) =add; (add representa la función de suma y el nombre de la función es la dirección de la función)

¿Cuál es el uso de los punteros de función? Los punteros de función pueden simplificar una gran cantidad de código y hacer que el programa sea más robusto. Puedes pensar en ello. El uso de una plantilla de puntero de función puede adaptarse a funciones con diferentes funciones siempre que el valor de retorno y los parámetros sean lo mismo, reduciendo en gran medida el código duplicado.

6. Suplementos de sizeof y stelen

En primer lugar, debemos darnos cuenta de la diferencia entre sizeof y strlen: sizeof solo mira el tipo en () y no ingresa el cálculo de la memoria, como int, y la matriz es int [10]. Y strlen ingresa a la memoria de dirección dada, encuentra "\0" y cómo contar el número de bytes.

Si sizeof () contiene un puntero, el resultado es 4 || 8. Debido a que el entorno de compilación es diferente, el tamaño del puntero es diferente y strlen solo puede contener direcciones y otros pueden acceder a él ilegalmente.

Supongo que te gusta

Origin blog.csdn.net/m0_74316391/article/details/131612057
Recomendado
Clasificación