Introducción al puntero del lenguaje C

La importancia de los punteros

①Representa algunas estructuras de datos complejas; ②Transfiere datos rápidamente; ③Haz que la función devuelva más de un valor;
④Acceso directo al hardware; ⑤Puede manejar cadenas de manera conveniente; ⑥Es la base para comprender referencias en lenguajes orientados a objetos;
Resumen: El puntero es C alma del lenguaje

Definición de puntero

Un puntero es una variable, una variable que se utiliza para almacenar una dirección.

★ Dirección:
el número de la unidad de memoria,
un entero no negativo a partir de cero.
Rango: 4G
★ Puntero:
① El puntero es la dirección, la dirección es el puntero
② La variable de puntero es la variable que almacena la dirección
③ El puntero y la variable de puntero son dos conceptos
④Durante la descripción, las variables de puntero generalmente se denominan punteros para abreviar. De hecho, tienen diferentes significados.
La esencia de los punteros es un número entero no negativo con operaciones restringidas.

★ La diferencia y la conexión entre el puntero, la dirección y la variable del puntero: el
puntero es la dirección, la dirección es el puntero, la
variable del puntero es una variable, guarda la dirección de la variable de tipo básico.
Si la variable puntero p tiene la dirección de la variable a, entonces se dice que p apunta a a, y * p es la variable a.
Si p es una variable apuntadora, * p representa la variable cuya dirección es el contenido de p, que es la variable apuntada por p.

He aquí un ejemplo sencillo:

#include <stdio.h>
int main()
{
    
    
	int *p;  //p是变量的名字,int*表示p变量存放的是int类型变量的地址
			//int*p:不表示定义了一个名字叫做*p的变量
			//int*p:应该理解为: p是变量名,p变量的数据类型是int*类型,所谓int*类型,实际就是存放int变量地址的类型
	int a = 2;
	p = &a;  //1.p保存了a的地址,因此p指向a
			//2.p不是a,a也不是p,修改p的值不影响a的值,修改a的值也不影响p的值
			//3.如果一个指针变量指向了某个普通变量,则*指针变量完全等同于普通变量
			//例:若p指向a,则*p=a (*p 和a可互相替换)
	printf("*p的值为:%d\np保存的地址:%p\n",*p,p);
	printf("a的值为:%d\na的地址为:%p\n",a,&a);
	return 0;
}

Mis resultados de carrera:
Inserte la descripción de la imagen aquí

Tipo de puntero

(1) Tipos básicos: int, short, long, float, double, char
como int * p; // significa definir un puntero, este puntero apunta a una variable entera, este puntero almacenará la dirección de la variable entera.

(2) Puntero de matriz: el puntero apunta a una matriz
int (* a) [10]; // Indica que el puntero apunta a una matriz de tipo int de longitud 10

(3) Puntero de función: el puntero apunta a una función
void (* a) (); // Indica que el puntero apunta a una función sin parámetros y sin valor de retorno

Aritmética de punteros

(1) Puntero + o-un número, que indica que el puntero suma y resta un múltiplo entero de la memoria ocupada por el tipo de este número. Por
ejemplo, int * p = a;
p = p + 2; // En VC6 .0, en realidad p se suma 2 * 4 = 8

(2) Un puntero menos un puntero indica el número de unidades de memoria o elementos que difieren entre los dos punteros. La adición de dos punteros no tiene sentido

(3) Operación relacional, si se definen dos variables apuntadoras pyq, y ambas han sido inicializadas,
si p == q, significa que pyq apuntan a la misma dirección
p> q, lo que significa que p apunta a una dirección alta y q El apuntar a una dirección baja a
menudo se compara con p y NULL para indicar el estado actual del puntero. Esto es muy utilizado en estructuras de datos. Es mejor buscar listas enlazadas, etc.

La relación entre punteros y matrices

Los punteros y las matrices están estrechamente relacionados. Las matrices pueden ser referenciadas por punteros, las matrices pueden almacenar punteros, también se puede acceder a las matrices mediante punteros y los punteros también pueden almacenar la dirección de una matriz.

Puntero de segundo nivel : un puntero a la dirección del puntero de primer nivel

¿Cómo modificar el valor de la variable ordinaria de la función que llama a través de la función llamada?
①El parámetro actual debe ser la dirección de la variable ordinaria & ...
②El parámetro formal debe ser una variable de puntero * ...
③En la función llamada, el valor de la variable relacionada de la función que llama se puede modificar mediante el método de * formal nombre del parámetro ...

Ejemplo:

#include< stdio.h>
void swap (int *p, int*q)
//形参的名字是p和q,接收实参数据的是p和q,而不是*p和*q
{
    
    
	int t; //如果要互换*p和*q的值,则t必须是int,不能是int*
	t=*p;  //p是int*,*p是int
	*p=*q;
	*q=t;
	return;
}
int main(void)
{
    
    
	int a=1;
	int b=2;
	swap(&a,&b);
	/*swap (* p, *q)是错误的
	swap(a, b)也是错误的*/
	printf("a=%d, b=%d\n",a,b);
	return 0;
}

Resultado de la operación:
a = 2, b = 1

Supongo que te gusta

Origin blog.csdn.net/qq_46485161/article/details/115023649
Recomendado
Clasificación