La mayor razón para aprender es deshacerse de la mediocridad, un día antes, habrá más esplendor en la vida, un día después, un día más mediocridad.
Al final del artículo, un resumen detallado de los ocho principales
diario de estudio
Tabla de contenido
2. Los datos de tipo de dirección en realidad contienen 3 piezas de información
3. Comparación inductiva de variables de puntero
Agregar (restar) un número entero a una variable de puntero
asignación de variable de puntero
Se pueden restar dos variables de puntero
Comparación de dos variables de puntero
Cinco, las ventajas del puntero.
Manipulación de punteros en lenguaje C
prefacio
El puntero se divide aquí en ocho partes pequeñas, que son "variable de puntero", " matriz referenciada por puntero ", "*referida a matriz multidimensional por puntero", "cadena referenciada por puntero", "*puntero a función", "* Funciones que devuelven valores de puntero", "* Arreglos de punteros y múltiples punteros", "* Asignación de memoria dinámica y variables de puntero a ella".
1. El significado del puntero
"Puntero" es un término figurativo en lenguaje C, que expresa vívidamente la relación de "apuntar a", y su realización física se logra a través de direcciones.
&a es la dirección de la variable a, también conocida como puntero de la variable a.
Una variable puntero es una variable que almacena una dirección.También se puede decir que una variable puntero es una variable que almacena un puntero.
El valor de una variable puntero es una dirección, también se puede decir que el valor de una variable puntero es un puntero.
Una variable de puntero también se puede denominar variable de dirección y su valor es una dirección.
& es el operador de dirección, &a es la dirección de a, también se puede decir que & es el operador puntero.
&a es un puntero a la variable a (es decir, un puntero a la variable a).
El nombre de la matriz es una dirección, que es la dirección del primer elemento de la matriz. También se puede decir que el nombre de la matriz es un puntero, que es el puntero del primer elemento de la matriz.
El nombre de la función es un puntero (que apunta al primer byte del área del código de la función), y también se puede decir que el nombre de la función es una dirección (la dirección del primer byte del área del código de la función).
Si el parámetro real de la función es un nombre de matriz, lo que se pasa al parámetro formal es una dirección. También se puede decir que lo que se pasa al parámetro formal es un puntero.
2. Los datos de tipo de dirección en realidad contienen 3 piezas de información
① Indica la dirección pura del número de memoria.
② Su propio tipo, es decir, el tipo de puntero.
③ Qué tipo de datos se almacenan en la unidad de almacenamiento identificada por él, es decir, el tipo base.
int a;
/* &a为a的地址,它就包括以上3个信息,它代表的是一个整型数据的地址,int是&a的基类型(即它指向的是int型的存储单元)。&a就是“指向整型数据的指针类型”或“基类型为整型的指针类型”,其类型可以表示为“int *”型。*/
Distinguir entre punteros y variables de puntero. Un puntero es una dirección y una variable de puntero es una variable utilizada para almacenar una dirección.
Para las variables de puntero, se dice que la dirección de cuya dirección está almacenada en la variable de puntero está apuntada por la variable de puntero.
int a,*p; //p是int*型的指针变量,基类型是int型
float b;
p=&a; //a是int型,合法
p=&b; //b是float型,类型不匹配
Un puntero void * es un puntero especial que no apunta a ningún tipo de datos. Si necesita usar esta dirección para apuntar a cierto tipo de datos, primero debe realizar una conversión de tipo en la dirección.
3. Comparación inductiva de variables de puntero
Definiciones de variables |
representación de tipos |
significado |
ent yo; |
En t |
definir una variable entera i |
int *p; |
En t * |
Defina p como una variable de puntero que apunta a datos enteros |
int a[5]; |
entero [5] |
Defina una matriz entera a con 5 elementos |
entero *p[4]; |
entero *[4] |
Defina la matriz de punteros p, que consta de 4 elementos de puntero que apuntan a datos enteros |
int(*p)[4]; |
entero (*)[4] |
p es una variable de puntero que apunta a una matriz unidimensional que contiene 4 elementos |
intf(); |
En t () |
f es una función que devuelve un valor de función entero |
int *p(); |
En t *() |
p es una función que devuelve un puntero a datos enteros |
int(*p)(); |
En t (*)() |
p es un puntero a una función que devuelve un valor entero |
int **p; |
En t ** |
p es una variable de puntero que apunta a una variable de puntero que apunta a datos enteros |
vacío *p; |
vacío * |
p es una variable de puntero, el tipo base es nulo (tipo vacío), no apunta a un objeto específico |
4. Aritmética de punteros
Agregar (restar) un número entero a una variable de puntero
p++; //将该指针变量的原值(是一个地址)和它指向的变量所占用的存储单元的字节数相加
asignación de variable de puntero
Asigne una dirección de variable a una variable de puntero. No se debe asignar un número entero a una variable de puntero.
p=&a; //将变量a的地址赋给p
p=array; //将数组array首元素地址赋给p
p=&array[i]; //将数组array第i个元素的地址赋给p
p=max; //max为已定义的函数,将max的入口地址赋给p
p1=p2; //p1和p2是基类型相同指针变量,将p2的值赋给p1
Se pueden restar dos variables de puntero
Si ambas variables de puntero apuntan a elementos en la misma matriz, la diferencia entre los valores de las dos variables de puntero es el número de elementos entre los dos punteros.
Comparación de dos variables de puntero
Si dos punteros apuntan a elementos de la misma matriz, se pueden comparar. Una variable de puntero que apunta al elemento anterior es "menor que" una variable de puntero que apunta al siguiente elemento. La comparación no tiene sentido si p1 y p2 no apuntan a la misma matriz.
valor vacío
Una variable puntero puede tener un valor nulo, es decir, la variable puntero no apunta a ninguna variable. NULL es una constante simbólica que representa el número entero 0. NULL se define en el archivo de encabezado stdio.h: #define NULL 0 Hace que p apunte a la unidad cuya dirección es 0. El sistema garantiza que la unidad no se utiliza para otros fines (no se almacenan datos válidos).
El valor de p es NULL y p no se le asigna un valor son dos conceptos diferentes. El primero tiene un valor (el valor es 0) y no apunta a ninguna variable, aunque el segundo no le ha asignado un valor a p, no significa que p no tenga valor, sino que su valor es un valor impredecible, es decir , p puede apuntar a una variable desconocida unidad especificada.
Cinco, las ventajas del puntero.
Mejorar la eficiencia del programa;
Cuando el valor de la variable a la que apunta el puntero cambia cuando se llama a la función, estos valores pueden ser utilizados por la función que llama, es decir, se pueden obtener múltiples valores modificables de la llamada a la función;
Se puede implementar la asignación de memoria dinámica.
Si el puntero se usa incorrectamente, habrá fallas ocultas, difíciles de encontrar y solucionar. Por lo tanto, use los punteros con mucho cuidado.
Manipulación de punteros en lenguaje C
Operación de puntero de lenguaje C (1) variable de puntero
Operación de puntero en lenguaje C (2) que hace referencia a matrices a través de punteros
Operación de puntero en lenguaje C (3) *Referido a arreglos multidimensionales a través de punteros
Operación de puntero de lenguaje C (cuatro) cadenas de referencia a través de punteros
Operación de puntero en lenguaje C (5) * puntero a función
Operación de puntero en lenguaje C (6) * función que devuelve un valor de puntero
Operación de puntero en lenguaje C (7) * matriz de punteros y múltiples punteros