Lenguaje C - puntero (detallado)

puntero (detallado)

1. Introducción básica a los punteros


imagen-20221030161854436


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; /* 一个字符型的指针 */

imagen-20221030162354356


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;
}

imagen-20221030162613746

数组在内存中是连续分布的
当对指针进行++时,指针会按照它指向的数据类型字节数大小增加,比如 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;
}

imagen-20221030162757417

(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; 
}

imagen-20221030163301962

(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?

imagen-20221030173032604


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:


imagen-20221030174620262

Diagrama esquemático del diseño de la memoria:

imagen-20221030174735705


(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] = 水浒传

imagen-20221030212345016

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)

imagen-20221030213421016

(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

imagen-20221030222521463

imagen-20221030223557477

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

imagen-20221030225716588

El diagrama de distribución de la memoria es el siguiente:

imagen-20221030225645267

Se agregan actualizaciones continuas. .

Supongo que te gusta

Origin blog.csdn.net/m0_53415522/article/details/127607200
Recomendado
Clasificación