Puntero de lenguaje C avanzado-1

 

Este artículo trae  1. Puntero de carácter 2. Puntero de matriz 3. ¡El conocimiento relevante de la matriz de punteros se explica en detalle!

Si cree que el artículo es bueno, espero sus tres enlaces de un clic. Su aliento es la fuente de motivación para mi creación. ¡Trabajemos juntos, corramos juntos y nos reunamos en la cima! ! !

Tabla de contenido

Revisión de los puntos básicos de conocimiento del puntero: 

1. Puntero de carácter

entrevista pregunta 1

2. Matriz de punteros

Realice una matriz bidimensional utilizando la simulación de matriz de punteros

 3. Puntero de matriz

1.& nombre de matriz VS nombre de matriz

Comprensión de los nombres de las matrices:

2. El uso de punteros de matriz


Revisión de los puntos básicos de conocimiento del puntero: 

La memoria se dividirá en unidades de memoria individuales, y cada unidad de memoria tiene su propio número independiente y único --- estos números también se denominan direcciones, en lenguaje C, las direcciones también se denominan punteros;

El puntero (dirección) debe almacenarse y almacenarse en una variable, que se denomina variable de puntero;

1. Un puntero es una variable que se utiliza para almacenar una dirección, que identifica de forma única una parte del espacio de memoria;
2. El tamaño del puntero se fija en 4/8 bytes ( plataforma de 32 bits / plataforma de 64 bits) (la señal eléctrica física se convierte en señal digital);
3. El puntero tiene un tipo, y el tipo del puntero determina el tamaño de paso del + -entero del puntero, y la autoridad de la operación de desreferencia del puntero;
4. Operaciones con punteros (suma y resta de enteros con punteros, resta de punteros con punteros, operaciones relacionales con punteros, etc.)
 ¡Si no entiendes, puedes revisarlo en el puntero elemental! ! !

A continuación ingresamos punteros avanzados:

1. Puntero de carácter

En el tipo de puntero, sabemos que hay un tipo de puntero que es un puntero de carácter char*;
El puntero de char* se usa para almacenar la dirección de una variable de tipo char;
Por ejemplo:

Otra forma de usarlo es la siguiente:

Código const char* pstr = "hola bit." ;
Es particularmente fácil para los estudiantes pensar que el bit hello de la cadena se coloca en el puntero del carácter pstr, pero / es esencialmente poner la dirección del primer carácter del bit hello de la cadena en pstr.
El significado del código anterior es almacenar la dirección del primer carácter h de una cadena constante en la variable de puntero pstr
Verificación de código:

resultado de la operación:

entrevista pregunta 1

Pregunta: ¿Cuál es el resultado final del siguiente código?

 analizar:

Aquí str3 y str4 apuntan a la misma cadena constante . C/C++ almacenará cadenas constantes en un área de memoria separada.Cuando varios punteros apuntan a la misma cadena, en realidad apuntarán al mismo bloque de memoria .
Pero cuando se usa la misma cadena constante para inicializar diferentes arreglos, se abrirán diferentes bloques de memoria. Sin embargo, str1 y str2 son las direcciones de los primeros elementos, por lo que str1 y str2 son diferentes, y str3 y str4 son iguales;

resultado de la operación:

2. Matriz de punteros

Matriz de enteros -- una matriz de enteros

matriz de caracteres -- una matriz de caracteres

matriz de punteros - una matriz de punteros
Aquí repasamos de nuevo, ¿qué significa la siguiente matriz de punteros?

analizar:

[ ] es más asociativo que *, así que primero combine con [ ] para formar una matriz, y luego el tipo de cada elemento de la matriz es int */char */char **;

Realice una matriz bidimensional utilizando la simulación de matriz de punteros

resultado de la operación: 

 3. Puntero de matriz

analogía:

Puntero de número entero: un puntero a una variable de número entero, una variable de puntero que almacena la dirección de una variable de número entero;

Puntero de carácter: un puntero a una variable de carácter, una variable de puntero que almacena la dirección de una variable de carácter;

Puntero de matriz --un puntero a una matriz, una variable que almacena la dirección de la matriz;

¿Los punteros de matriz son punteros? ¿O una matriz?
La respuesta es: puntero
Ya estamos familiarizados con:
Puntero entero: int * pinta; Un puntero que puede apuntar a datos enteros
Puntero de punto flotante: float * pf; puede apuntar a un puntero a datos de punto flotante
El puntero de matriz debe ser: un puntero que pueda apuntar a una matriz
¿Cuál de los siguientes códigos es un puntero de matriz?

analizar:

En primer lugar, el tipo de combinación de [ ] es mayor que *, por lo que la primera es una matriz, y el tipo de variables almacenadas en la matriz es int *, por lo que int* p1[10] es una matriz de punteros;

int ( * p )[ 10 ];
//Explicación: p se combina primero con *, lo que indica que p es una variable de puntero y luego apunta a una matriz de 10 enteros. Entonces p es un puntero, que apunta a una matriz, llamado puntero de matriz
//Nota aquí: la prioridad de [] es mayor que la de *, por lo que se debe agregar () para garantizar que p se combine con * primero

1.& nombre de matriz VS nombre de matriz

Comprensión de los nombres de las matrices:

El nombre de la matriz representa la dirección del primer elemento.

Pero hay 2 excepciones.

1. sizeof (nombre de la matriz), el nombre de la matriz aquí no es la dirección del primer elemento, sino la dirección de toda la matriz, el cálculo es el tamaño de toda la matriz y la unidad es byte;

2.&Nombre del arreglo, donde el nombre del arreglo es la dirección del arreglo completo, &nombre del arreglo es el tamaño del arreglo completo;

El siguiente código: 

De acuerdo con el código anterior, encontramos que, de hecho, &arr y arr tienen el mismo valor, pero el significado debería ser diferente;
De hecho: &arr representa la dirección del arreglo , no la dirección del primer elemento del arreglo. (experimenta cuidadosamente)
El tipo de &arr en este ejemplo es: int(*)[10], que es un tipo de puntero de matriz
La dirección de la matriz es +1, omitiendo el tamaño de toda la matriz, por lo que la diferencia entre &arr+1 y &arr es 40.

2. El uso de punteros de matriz

El puntero de matriz apunta a una matriz y la dirección de la matriz debe almacenarse en el puntero de matriz;
Representación de un puntero de matriz:

Imprima el contenido de una matriz usando un puntero de matriz:

 (no se recomienda usar así)

Generalmente es más conveniente usarlo en arreglos bidimensionales

Por ejemplo:

analizar:

final de este capitulo~


Supongo que te gusta

Origin blog.csdn.net/2301_77509762/article/details/132015715
Recomendado
Clasificación