当前位置:网站首页>C | connaissance des pointeurs (1)

C | connaissance des pointeurs (1)

2021-10-14 06:44:34 Ersansui

Préface

Les gars,Je suis sûr que vous savez tous que le pointeur estCUne caractéristique de la langue!

Apprenez le pointeur,C'est très important pour les études futures,Mais le pointeur, c'est apprendreCLes difficultés du processus linguistique,Mais c'est bon.,Apprenons à connaître le pointeur aujourd'hui,J'espère que cela aidera les enfants à mieux comprendre le pointeur~


Les gars,Connaissance des pointeurs(2.)Mise à jour Oh~

Mauvais lien ci - dessous pour sauter~

Connaissance des pointeurs(2.)
Insérer la description de l'image ici

Le concept de pointeur

Qu'est - ce qu'un pointeur?

Le numéro de l'unit é mémoire dans la mémoire de l'ordinateur est le pointeur.

Dans la mémoire de l'ordinateur, La mémoire est divisée en plusieurs unités de mémoire , Chaque Unit é mémoire peut être un octet , Et chaque octet correspond à un numéro , Nous pouvons trouver cette Unit é mémoire avec ce numéro .

Comme si on connaissait une adresse , On peut trouver la maison à l'adresse .

Alors..., Le numéro de l'unit é mémoire peut être l'adresse , Et l'adresse peut être visualisée comme un pointeur .

Insérer la description de l'image ici

En plus, Nous avons aussi souvent abrégé la variable pointeur en pointeur .

Et entier 、 Le type de données flottantes est le même ,Adresse(Pointeur) Un type de données est également nécessaire pour stocker , La variable utilisée pour stocker l'adresse devient alors la variable pointeur .

Nous sommes souvent abrégés en pointeurs .

Pointeur(Variables) C'est pour les adresses (Pointeur)De.

Pointeur et type de pointeur

Type de pointeur

Nous le savons tous.,Il existe différents types de variables,Remodelage,Type de point flottant, etc..

La variable pointeur a donc le type de données correspondant .

Nous pouvons utiliser le pointeur (Adresse) Pour trouver un espace , Quel type de données est cet espace , Alors ce pointeur (Variables) Il correspond au même type de données .

Voici les châtaignes :

int main()
{
    

	int a = 10;// Créer un espace entier en mémoire 
	int* p;//Ici.int*  Est un type de données , Utilisé pour définir un  p Variable pointeur pour
	p = &a;//& Ce symbole s'appelle prendre l'adresse , Pour enlever aAdresse de la variable, Et a donné cette adresse à p

	return 0;
}
int main()
{
    
	int i = 0;
	char c = 0;
	short s = 0;
	float f = 0;
	double d = 0;

	int* pi = &i;
	char* pc = &c;
	short* ps = &s;
	float* pf = &f;
	double* pd = &d;

	return 0;
}

Grâce au code ci - dessus, nous pouvons savoir , Adresses des différents types de variables , Sont stockés avec des variables de pointeur du type correspondant .

Pointeur sauvage et pointeur vide

Pointeur sauvage

Qu'est - ce qu'un pointeur sauvage?

Un pointeur sauvage signifie que la position à laquelle le pointeur pointe est inconnue(Au hasard、C'est pas vrai、Il n'y a pas de limite claire)

Il y a de nombreuses raisons pour lesquelles les pointeurs sauvages se forment

  1. Pointeur non initialisé
#include <stdio.h>
int main()
{
    
	int* p;//Le pointeur de variable locale n'est pas initialisé,La valeur par défaut est aléatoire
	*p = 20;
	return 0;
}
  1. Pointeur hors de portée accès
#include <stdio.h>
int main()
{
    
	int arr[10] = {
     0 };
	int* p = arr;
	int i = 0;
	for (i = 0; i <= 11; i++)
	{
    
		//Lorsque le pointeur pointe au - delà du tableauarrDans la plage de,pC'est le pointeur sauvage
		*(p++) = i;
	}
	return 0;
}
  1. Dégagement de l'espace pointé par le pointeur

La connaissance de la mémoire dynamique est nécessaire ici , Je n'étendrai pas l'explication .

Les petits partenaires intéressés peuvent apprendre par eux - mêmes .

Pointeur vide

Un pointeur vide signifie que l'adresse est 0Pointeur vers.

Chaque adresse est une série de numéros numériques , Quand ce numéro est 0Quand, Appelé le pointeur court .

Pour les aiguilles à doigts vides NULLPour représenter.

Attention!!

Le pointeur vide doit être entièrement majuscule ! NULL!

Comment contourner le pointeur sauvage

Comprendre ce qu'est un pointeur sauvage et un pointeur vide , Comment éviter les pointeurs sauvages ?

  1. Initialisation du pointeur
  2. Attention à ce que le pointeur dépasse la limite
  3. Pointeur vers l'espaceNULL
  4. Évitez de renvoyer l'adresse d'une variable locale
  5. Vérifier la validité avant d'utiliser le pointeur
// Vérifier la validité du pointeur 
#include <stdio.h>
int main()
{
    
  int *p = NULL;
  //....
  int a = 10;
  p = &a;
  if(p != NULL)
 {
    
    *p = 20;
 }
  return 0;
}

Fonctionnement du pointeur

Nous savons tous que les pointeurs ont des types correspondants , À quoi servent ces types de pointeurs ?

La réponse

  1. Le type de pointeur détermine la taille d'un pas vers l'avant ou vers l'arrière(Distance).
  2. Le type de pointeur détermine,Quelles sont les permissions de désactiver le pointeur(Peut fonctionner sur plusieurs octets).
    (Par exemple,: char* Le pointeur de non - référence ne peut accéder qu'à un octet,Et int* Le pointeur pour accéder à quatre octets sans référence.)

Pointeur plus moins entier

Le type de pointeur détermine la distance parcourue par le pointeur vers l'avant ou vers l'arrière , Incarné dans le pointeur plus moins entier et le pointeur moins pointeur .

Le Code de démonstration est le suivant:

#include <stdio.h>
//Exemple de démonstration
int main()
{
    
int n = 10;
char *pc = (char*)&n;
int *pi = &n;
printf("%p\n", &n);
printf("%p\n", pc);
printf("%p\n", pc+1);
printf("%p\n", pi);
printf("%p\n", pi+1);
return  0;
}

Insérer la description de l'image ici

Le résultat de l'exécution du code ci - dessus est illustré à la figure ,On peut savoir, Lorsque le type de pointeur est un pointeur de caractère ,Pointeur+1Je ne peux que sauter.1 Taille des octets ; Et quand le type de pointeur est entier ,Chaque fois+1Je peux sauter.4 Taille des octets .

Pointeur moins pointeur

La même chose., Quand le pointeur soustrait le pointeur , Un élément qui représente la différence entre deux pointeurs pour le type de données correspondant .

int main()
{
    
	int arr[10];

	int* p1 = &arr[0];
	int* p2 = &arr[4];

	int n = p2 - p1;
	printf("%d\n", n);

	return 0;
}

Le résultat du code ci - dessus est 4; Cela signifie qu'il y a une différence entre les deux pointeurs 4 Éléments entiers .

Pointeurs et tableaux

J'ai aussi parlé de la connaissance des tableaux , Le nom du tableau indique dans la plupart des cas l'adresse du premier élément .

Sauf dans deux cas particuliers .

  1. sizeof(Nom du tableau)
  2. &Nom du tableau

Nous pouvons accéder aux éléments du tableau par l'indice ,Nous pouvons également passer par* Décoder les éléments utilisés pour accéder au tableau , En fait, les deux sont équivalents quand !

Supposons que le nom du tableau soit arr,Alorsarr[ i ] Équivalent à*(arr+i).

Je ne vais pas m'étendre ici , Les petits amis intéressés peuvent voir mon blog précédent sur Array Oh ~

Connaissance des tableaux (Un.)

Connaissance des tableaux (2.)

Pointeur secondaire et pointeur Multi - niveaux

Pointeur secondaire

La variable pointeur est également une variable,Une variable a une adresse,Où est l'adresse de la variable pointeur?

La réponse est stockée dans un pointeur secondaire .
Insérer la description de l'image ici

int main()
{
    
	int n = 10;
	int* p = &n;
	int** pp = &p;

	return 0;
}

Par l'image ci - dessus et le code ci - dessus ,On peut savoir,n L'adresse de pMoyenne,p L'adresse de ppMoyenne,En ce moment,p C'est un pointeur de niveau 1 ,pp C'est un pointeur secondaire .

Pointeur à plusieurs niveaux

La même chose., Le pointeur secondaire a aussi sa propre adresse , La variable utilisée pour stocker l'adresse du pointeur de deuxième niveau est le pointeur de troisième niveau .

Et ainsi de suite., Il y aura quatre niveaux 、Niveau 5、 Niveau 6, pointeur égal , Mais c'est trop compliqué , On peut juste comprendre , Et il n'y a pas besoin d'aller aussi loin .

Conclusion

Aujourd'hui, les connaissances sur les pointeurs sont partagées ici !

Nous continuerons à partager les connaissances sur les pointeurs !

————————————————————————————

Les gars,Connaissance des pointeurs(2.)Mise à jour Oh~

Mauvais lien ci - dessous pour sauter~

Connaissance des pointeurs(2.)

S'il y a encore des connaissances qui n'ont pas été mentionnées ou qui ont mal tourné,Bienvenue à laisser un message dans la section commentaires~

La création n'est pas facile,J'espère que les gars bougeront les mains.,Fais - moi attention.、Un Oui et un commentaire.~

En raison de mes capacités limitées,S'il y a une erreur,J'espère que les grands hommes feront remarquer!

Insérer la description de l'image ici

版权声明
本文为[Ersansui]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/10/20211013211538467t.html

随机推荐