Aprendizaje de lengua C [6] -punta

En el lenguaje C, los punteros pueden simplificar la ejecución de algunas tareas de programación C, como la asignación de memoria dinámica, que no se puede ejecutar sin punteros.

Cada variable tiene una ubicación de memoria, y cada ubicación de memoria define una dirección a la que se puede acceder usando el operador &, que representa una dirección en la memoria.

1. ¿Qué es un puntero?

Un puntero es 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, debes declararlo antes de usar un puntero para almacenar otras variables.

La forma general de declaración de variable de puntero es: tipo * var-name

type es el tipo base del puntero y debe ser un tipo de datos C válido

var-name es el nombre de la variable de puntero

* Se utiliza para especificar que una variable es un puntero.

 Nota:

  • Independientemente de si es un entero, punto flotante, carácter u otro tipo de datos, el tipo del valor de puntero correspondiente es el mismo y es un número hexadecimal largo que representa una dirección de memoria.
  • La única diferencia entre punteros de diferentes tipos de datos es que los tipos de datos de las variables o constantes apuntadas por los punteros son diferentes.

2. ¿Cómo usar los punteros?

Operaciones con punteros:

@ Definir una variable de puntero, asignar la dirección de la variable al puntero

@Accede al valor de la dirección disponible en la variable puntero Estos son el valor de la variable en la dirección especificada por el operando a través del operador unario *.

Nota:

  • Cuando se declara la variable, si no hay una dirección exacta para asignar, la variable de puntero se puede asignar a "NULL", que se denomina puntero nulo.
  • El puntero NULL es una constante con un valor de 0 definido en la biblioteca estándar.
  • En la mayoría de los sistemas operativos, los programas no pueden acceder a la memoria en la dirección 0 porque la memoria está reservada por el sistema operativo. Sin embargo, la dirección de memoria 0 tiene un significado particularmente importante, indica que el puntero no apunta a una ubicación de memoria accesible. Pero por convención, si el puntero contiene un valor nulo (valor cero), se supone que no apunta a nada.

Para verificar si hay un puntero nulo, puede usar la instrucción if de la siguiente manera:

if (ptr) / * Si p no está vacío, entonces complete * /

if (! ptr) / * Si p está vacío, entonces complete * /

Tres, puntero C detallado

3.1, operaciones aritméticas de puntero

Puede realizar punteros: ++, -, +, -

3.2, matriz de punteros

Matriz utilizada para almacenar punteros

3.3, el puntero al puntero

C permite punteros a punteros

3.4. Pasar un puntero a una función

Pasar parámetros por referencia o dirección, de modo que los parámetros pasados ​​se cambien en la función de llamada

3.5. Devolver un puntero desde una función

C permite que las funciones devuelvan punteros a variables locales, variables estáticas y asignación de memoria dinámica

Cuatro, puntero de función

Un puntero de función es una variable de puntero que apunta a una función.

Por lo general, decimos que la variable de puntero se refiere a una variable como un número entero, carácter o matriz, y un puntero de función se refiere a una función.

Los punteros de función se pueden utilizar para llamar a funciones y pasar parámetros como funciones generales.

Declaración de variable de puntero de función:

typedef int (* fun_ptr) (int, int); // Declara un tipo de puntero de función que apunta al mismo parámetro y valor de retorno

Cinco, función de devolución de llamada

Puntero de función como parámetro de una función

Una variable de puntero de función se puede utilizar como parámetro de una función, y una función de devolución de llamada es una función llamada a través de un puntero de función.

En pocas palabras: una función de devolución de llamada es una función implementada por usted cuando se ejecuta la función de otra persona.

Da un ejemplo simple:

Vas a una tienda a comprar algo y lo que quieres está agotado, así que dejas tu número de teléfono en el cajero. Después de unos días, la tienda está en stock, el cajero te llama y luego recibes la llamada. Luego fui a la tienda a recoger la mercadería. En este ejemplo, su número de teléfono se llama función de devolución de llamada, y si deja la llamada al empleado, se llama función de devolución de llamada de registro. Más adelante en la tienda, se llama activar el evento relacionado con la devolución de llamada. El empleado que lo llama se llama llamar a la función de devolución de llamada. Usted va a la tienda a recoger la mercancía se llama responder a un evento de devolución de llamada.

 Seis, suplemento enum (enumeración)

La enumeración es un tipo de datos básico en lenguaje C, que puede hacer que los datos sean más concisos y fáciles de leer.

Formato de sintaxis:

enum nombre de enumeración {elemento de enumeración 1, elemento de enumeración 2, ...};
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};

Nota: El valor predeterminado del primer miembro de enumeración es 0 y el valor de los miembros de enumeración posteriores se agrega al miembro anterior en 1. En este ejemplo, definimos el valor del primer miembro de enumeración como 1, el segundo como 2 y así sucesivamente.

Puede cambiar el valor de un elemento de enumeración al definir un tipo de enumeración:

enum season {primavera, verano = 3, otoño, invierno};

Para los elementos de enumeración que no especifican un valor, el valor del elemento anterior más uno. En otras palabras, el valor de la primavera es 0, el valor del verano es 3, el valor del otoño es 4 y el valor del invierno es 5.

La definición de variables de enumeración:

1. Defina primero el tipo de enumeración y luego defina la variable de enumeración

enumeración DÍA 
{ 
      LUN = 1, MAR, MIÉ, JUE, VIE, SÁB, DOM 
}; 
enum DAY día;

2. Defina la variable de enumeración mientras define el tipo de enumeración

enum DÍA 
{ 
      LUN = 1, MAR, MIÉ, JUE, VIE, SÁB, DOM 
} día;

3. Omita el nombre de la enumeración y defina directamente la variable de enumeración.

enum 
{ 
      LUN = 1, MAR, MIÉ, JUE, VIE, SAB, DOM 
} día;

En el lenguaje C, los tipos de enumeración se tratan como tipos int o unsigned int, por lo que no hay forma de recorrer los tipos de enumeración de acuerdo con la especificación del lenguaje C.

Sin embargo, en algunos casos especiales, el tipo de enumeración debe ser continuo para lograr un recorrido condicional. Los ejemplos son los siguientes:

#include <stdio.h>
 
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
int main()
{
    // 遍历枚举元素
    for (day = MON; day <= SUN; day++) {
        printf("枚举元素:%d \n", day);
    }
}

/*输出结果*/
枚举元素:1 
枚举元素:2 
枚举元素:3 
枚举元素:4 
枚举元素:5 
枚举元素:6 
枚举元素:7

 

Supongo que te gusta

Origin blog.csdn.net/qq_46009608/article/details/115288115
Recomendado
Clasificación