puntero (detallado)
1. Introducción básica a los punteros
2. ¿Qué es un puntero?
Un puntero es una variable cuyo valor es la dirección de otra variable ( como se explica en el diagrama anterior ), es decir, la dirección de la ubicación de memoria
dirección directa. Al igual que cualquier otra variable o constante, antes de usar un puntero para almacenar la dirección de otra variable, es
declaración. La forma general de una declaración de variable de puntero es:
int *ip; /* 一个整型的指针 */
double *dp; /* 一个 double 型的指针 */
float *fp; /* 一个浮点型的指针 */
char *ch; /* 一个字符型的指针 */
3. Operaciones aritméticas con punteros
(1) Operación de incremento de puntero
#include <stdio.h>
const int MAX=3;
int main(){
int var[] = {
10,100,200};
int i,*ptr;//ptr是一个int*指针
ptr = var;//ptr 指向了var数组的首地址
for(i=0;i<MAX;i++){
printf("var[%d]地址=%p \n",i,ptr);
printf("存储值:var[%d]=%d\n",i,*ptr);
ptr++;//ptr=ptr+1(1个int字节数)
}
getchar();
return 0;
}
数组在内存中是连续分布的
当对指针进行++时,指针会按照它指向的数据类型字节数大小增加,比如 int *
指针,每++ , 就增加4个字节
(2) Operación de disminución de puntero
#include <stdio.h>
const int MAX=3;
int main(){
int var[] = {
10,100,200};
int i,*ptr;//ptr是一个int*指针
ptr = &var[MAX-1];//var2的地址
for(i=MAX;i>0;i--){
//反向遍历
printf("var[%d]地址=%p \n",i-1,ptr);
printf("存储值:var[%d]=%d\n",i-1,*ptr);
ptr--;//ptr=ptr+1(1个int字节数)
}
getchar();
return 0;
}
(3) puntero + - operación
#include <stdio.h>
int main () {
int var[] = {
10, 100, 200};
int i, *ptr;
ptr = var;
ptr += 2; //ptr的存储的地址 + 2个int的字节(8个字节)
printf("var[2]=%d\nvar[2]的地址=%p\nptr存储的地址=%p\nptr指向的地址的内容=%d",
var[2], &var[2], ptr, *ptr);
getchar();
return 0;
}
(4) Comparación de punteros
Los punteros se pueden comparar mediante operadores relacionales como ==, < <= y > >=. Si p1 y p2 apuntan a dos variables, como diferentes elementos en la misma matriz, puede comparar el tamaño de p1 y p2, vea el siguiente código, ¿cuál es el resultado?
4. Matriz de punteros [énfasis]
(1) Introducción básica
Para hacer que los elementos de la matriz apunten a las direcciones (punteros) de int u otros tipos de datos. Se puede usar una matriz de punteros
(2) Definición de matriz de punteros
* Nombre de matriz de puntero de tipo de datos [tamaño];
Ejemplo de inicio rápido:
Diagrama esquemático del diseño de la memoria:
(3) Caso de aplicación de matriz de punteros
Escriba un programa para definir una matriz de punteros a caracteres para almacenar listas de cadenas (títulos de cuatro libros famosos) y mostrar información de cadenas atravesando la matriz de punteros (es decir, defina una matriz de punteros, cada elemento de la matriz, apuntando a una cadena)
books[0] = 三国演义
books[1] = 西游记
books[2] = 红楼梦
books[3] = 水浒传
5. Punteros a punteros (múltiples punteros)
Un puntero a un puntero es una forma de direccionamiento indirecto de varios niveles , o una cadena de punteros. Por lo general, un puntero contiene la dirección de una variable. Cuando definimos un puntero a un puntero, el primer puntero contiene la dirección del segundo puntero y el segundo puntero apunta a la ubicación que contiene el valor real (como se muestra a continuación)
(1) Una variable de puntero que apunta a un puntero debe declararse de la siguiente manera, es decir, se colocan dos asteriscos antes del nombre de la variable. Por ejemplo, lo siguiente
declara un puntero a un puntero de tipo int: int **ptr; // ptr es de tipo int **
(2) Cuando un puntero apunta indirectamente a un valor objetivo a otro puntero, acceder a este valor requiere el uso de dos operadores de asterisco, como **ptr
(3) Demostración de caso + diagrama de diseño de memoria
6. Pase el puntero (dirección) a la función
Cuando el tipo de parámetro formal de la función es un tipo de puntero, al usar la función, es necesario pasar un puntero, o una dirección, o una matriz al parámetro formal, por ejemplo
Caso 1: Pasar dirección o puntero a variable de puntero
El diagrama de distribución de la memoria es el siguiente:
Se agregan actualizaciones continuas. .