Opération de pointeur de langage C huit résumé

insérez la description de l'image ici

La principale raison d'apprendre est de se débarrasser de la médiocrité. Un jour plus tôt, il y aura plus de splendeur dans la vie, un jour plus tard, un jour plus de médiocrité. 


A la fin de l'article, un résumé détaillé des huit principaux 


journal d'étude

Table des matières

journal d'étude

Avant-proposModifier

1. La signification du pointeur 

2. Une donnée de type adresse contient en fait 3 informations 

3. Comparaison inductive des variables de pointeur

4. Arithmétique des pointeurs 

Ajouter (soustraire) un entier à une variable de pointeur

affectation de variable de pointeur

Deux variables de pointeur peuvent être soustraites

Comparer deux variables de pointeur

valeur vide

Cinq, les avantages du pointeur

Manipulation du pointeur du langage C


avant-propos

Le pointeur est ici divisé en huit petites parties, qui sont "pointer variable", " array         referenced by pointer ", "*referred to multidimensional array by pointer", "string referenced by pointer", "*pointer to function", "* Fonctions renvoyant des valeurs de pointeur", "* Tableaux de pointeurs et pointeurs multiples", "* Allocation de mémoire dynamique et variables de pointeur vers celui-ci".   

1. La signification du pointeur 

        "Pointer" est un nom figuratif en langage C, qui exprime de manière vivante la relation de "pointer vers", et sa réalisation physique est accomplie à travers des adresses.

&a est l'adresse de la variable a, également appelée pointeur de la variable a.

Une variable de pointeur est une variable qui stocke une adresse. On peut également dire qu'une variable de pointeur est une variable qui stocke un pointeur.

La valeur d'une variable pointeur est une adresse, on peut aussi dire que la valeur d'une variable pointeur est un pointeur.

Une variable de pointeur peut également être appelée une variable d'adresse et sa valeur est une adresse.

& est l'opérateur d'adresse, &a est l'adresse de a, on peut aussi dire que & est l'opérateur de pointeur.

&a est un pointeur vers la variable a (c'est-à-dire un pointeur vers la variable a).

Le nom du tableau est une adresse, qui est l'adresse du premier élément du tableau. On peut également dire que le nom du tableau est un pointeur, qui est le pointeur du premier élément du tableau.

Le nom de la fonction est un pointeur (pointant sur le premier octet de la zone de code de fonction), et on peut également dire que le nom de la fonction est une adresse (l'adresse du premier octet de la zone de code de fonction).

Si le paramètre réel de la fonction est un nom de tableau, ce qui est passé au paramètre formel est une adresse. On peut également dire que ce qui est passé au paramètre formel est un pointeur.

2. Une donnée de type adresse contient en fait 3 informations 

① Indique l'adresse pure du numéro de mémoire.

② Son propre type, c'est-à-dire le type de pointeur.

③ Quel type de données est stocké dans l'unité de stockage identifiée par celui-ci, c'est-à-dire le type de base.

int a;
/* &a为a的地址,它就包括以上3个信息,它代表的是一个整型数据的地址,int是&a的基类型(即它指向的是int型的存储单元)。&a就是“指向整型数据的指针类型”或“基类型为整型的指针类型”,其类型可以表示为“int *”型。*/

Pour faire la distinction entre les pointeurs et les variables de pointeur. Un pointeur est une adresse et une variable de pointeur est une variable utilisée pour stocker une adresse.

Pour les variables de pointeur, l'adresse dont l'adresse est stockée dans la variable de pointeur est dite pointée par la variable de pointeur.

int a,*p;		//p是int*型的指针变量,基类型是int型 
float b;
p=&a;		//a是int型,合法 
p=&b;		//b是float型,类型不匹配

Un pointeur void * est un pointeur spécial qui ne pointe sur aucun type de données. Si vous devez utiliser cette adresse pour pointer vers un certain type de données, vous devez d'abord effectuer une conversion de type sur l'adresse.

3. Comparaison inductive des variables de pointeur

Définitions des variables

représentation typologique

signification

int je ;

entier

définir une variable entière i

entier *p ;

entier *

Définissez p comme une variable de pointeur pointant vers des données entières

int a[5] ;

entier [5]

Définir un tableau d'entiers a avec 5 éléments

entier *p[4] ;

entier *[4]

Définissez le tableau de pointeurs p, qui se compose de 4 éléments pointeurs pointant vers des données entières

entier (*p)[4] ;

entier (*)[4]

p est une variable pointeur pointant vers un tableau unidimensionnel contenant 4 éléments

int f();

entier ()

f est une fonction qui renvoie une valeur de fonction entière

entier *p();

entier *()

p est une fonction qui renvoie un pointeur vers des données entières

entier (*p)();

entier (*)()

p est un pointeur vers une fonction qui renvoie une valeur entière

entier **p ;

entier **

p est une variable pointeur qui pointe vers une variable pointeur pointant vers des données entières

vide *p ;

annuler *

p est une variable pointeur, le type de base est void (type vide), ne pointe pas vers un objet spécifique

4. Arithmétique des pointeurs 

Ajouter (soustraire) un entier à une variable de pointeur

p++;		//将该指针变量的原值(是一个地址)和它指向的变量所占用的存储单元的字节数相加

affectation de variable de pointeur

Attribuez une adresse de variable à une variable de pointeur. Un entier ne doit pas être affecté à une variable pointeur.

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

Deux variables de pointeur peuvent être soustraites

Si les deux variables de pointeur pointent vers des éléments du même tableau, la différence entre les valeurs des deux variables de pointeur correspond au nombre d'éléments entre les deux pointeurs.

Comparer deux variables de pointeur

Si deux pointeurs pointent sur des éléments du même tableau, ils peuvent être comparés. Une variable pointeur pointant vers l'élément précédent est "inférieur à" une variable pointeur pointant vers l'élément suivant. La comparaison n'a pas de sens si p1 et p2 ne pointent pas vers le même tableau.

valeur vide

        Une variable de pointeur peut avoir une valeur nulle, c'est-à-dire que la variable de pointeur ne pointe vers aucune variable. NULL est une constante symbolique représentant l'entier 0. NULL est défini dans le fichier d'en-tête stdio.h : #define NULL 0 Il fait pointer p vers l'unité dont l'adresse est 0. Le système garantit que l'appareil n'est pas utilisé à d'autres fins (aucune donnée valide n'est stockée).

        La valeur de p est NULL et p n'a pas de valeur sont deux concepts différents. Le premier a une valeur (la valeur est 0) et ne pointe sur aucune variable. Bien que le second n'attribue pas de valeur à p, cela ne signifie pas que p n'a pas de valeur, mais sa valeur est une valeur imprévisible, c'est-à-dire , p peut pointer vers une variable inconnue. unité spécifiée.

Cinq, les avantages du pointeur

Améliorer l'efficacité du programme ;

Lorsque la valeur de la variable pointée par le pointeur change lorsque la fonction est appelée, ces valeurs peuvent être utilisées par la fonction appelante, c'est-à-dire que plusieurs valeurs modifiables peuvent être obtenues à partir de l'appel de la fonction ;

L'allocation de mémoire dynamique peut être implémentée.

Si le pointeur n'est pas utilisé correctement, il y aura des défauts cachés, difficiles à trouver et à dépanner. Par conséquent, utilisez les pointeurs avec beaucoup de prudence.

Manipulation du pointeur du langage C

Opération de pointeur en langage C (1) variable de pointeur

Opération de pointeur en langage C (2) référençant des tableaux via des pointeurs

Opération de pointeur en langage C (3) *Se référer à des tableaux multidimensionnels via des pointeurs 

Opération de pointeur en langage C (quatre) faisant référence à des chaînes via des pointeurs

Opération du pointeur en langage C (5) * pointeur vers la fonction

Opération de pointeur en langage C (6) * fonction qui renvoie une valeur de pointeur

Opération de pointeur en langage C (7) * tableau de pointeurs et plusieurs pointeurs 

Opération de pointeur en langage C (8) * allocation de mémoire dynamique et variables de pointeur pointant vers elle

Je suppose que tu aimes

Origine blog.csdn.net/m0_63794226/article/details/126617644
conseillé
Classement