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

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é. 

journal d'étude

Table des matières

journal d'étude

Avant-proposModifier

1. Quelle est l'allocation dynamique de la mémoire

2. Comment établir une allocation dynamique de mémoire 

Utilisez la fonction malloc pour ouvrir une zone de stockage dynamique       

 Utilisez la fonction calloc pour ouvrir une zone de stockage dynamique

Utilisez la fonction realloc pour réallouer la mémoire dynamique 

Utilisez la fonction libre pour libérer la zone de stockage dynamique 

Trois, type de pointeur vide 

 Avis

exemple

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. Quelle est l'allocation dynamique de la mémoire

        Les variables globales sont allouées dans une zone de stockage statique en mémoire, et les variables locales non statiques (y compris les paramètres formels) sont allouées dans une zone de stockage dynamique en mémoire.Cette zone de stockage est une zone appelée pile (stack). De plus, le langage C permet également la mise en place de zones d'allocation dynamique mémoire pour stocker certaines données temporaires, ces données n'ont pas besoin d'être définies dans la partie déclaration du programme, ni d'être libérées jusqu'à la fin de la fonction , mais peut être ouvert à tout moment en cas de besoin. Ces données sont temporairement stockées dans une zone de stockage gratuite spéciale appelée zone de tas (heap). Vous pouvez demander au système un espace de la taille requise selon vos besoins. Comme elles ne sont pas définies comme des variables ou des tableaux dans la partie déclaration, ces données ne peuvent pas être référencées par des noms de variables ou des noms de tableaux, uniquement par des pointeurs.

2. Comment établir une allocation dynamique de mémoire 

Utilisez la fonction malloc pour ouvrir une zone de stockage dynamique       

 void * malloc (taille entière non signée)

        La fonction est d'allouer un espace continu d'une longueur de taille dans la zone de stockage dynamique de la mémoire. Le type du paramètre formel size est défini comme un entier non signé (les nombres négatifs ne sont pas autorisés). La valeur de cette fonction (c'est-à-dire la "valeur de retour") est l'adresse du premier octet de la zone allouée, ou en d'autres termes, cette fonction est une fonction de pointeur, et le pointeur renvoyé pointe sur le premier octet de la zone allouée.

        Le type de base du pointeur est void, c'est-à-dire qu'il ne pointe sur aucun type de données et ne fournit qu'une adresse pure.

 Utilisez la fonction calloc pour ouvrir une zone de stockage dynamique

 void*calloc(non signé n,taille non signée)

        La fonction est d'allouer n espaces continus d'une longueur de taille dans la zone de stockage dynamique de la mémoire.Cet espace est généralement assez grand pour stocker un tableau. La fonction calloc peut être utilisée pour ouvrir un espace de stockage dynamique pour les tableaux unidimensionnels, n est le nombre d'éléments du tableau et la longueur de chaque élément est la taille. Il s'agit d'un tableau dynamique.

Utilisez la fonction realloc pour réallouer la mémoire dynamique 

 void*realloc(void *p,taille entière non signée)

        Si l'espace dynamique a été obtenu via la fonction malloc ou la fonction calloc et que vous souhaitez modifier sa taille, vous pouvez utiliser la fonction realloc pour le réaffecter. Utilisez la fonction realloc pour modifier la taille de l'espace dynamique pointé par p en size. La valeur de p ne change pas. Renvoie NULL si la réallocation échoue.

Utilisez la fonction libre pour libérer la zone de stockage dynamique 

 vide libre (vide *p)

        La fonction est de libérer l'espace dynamique pointé par la variable pointeur p, afin que cette partie de l'espace puisse être réutilisée par d'autres variables. p doit être la valeur de retour de la fonction obtenue lors du dernier appel de la fonction calloc ou malloc. 

Trois, type de pointeur vide 

        C99 autorise les types de pointeur avec le type de base void. Vous pouvez définir une variable pointeur dont le type de base est void (c'est-à-dire une variable de type void*), qui ne pointe sur aucun type de données. Lors de l'affectation de sa valeur à une autre variable de pointeur, elle est convertie en type par le système pour l'adapter au type de la variable affectée.

int *pt;
pt=(int *)malloc(100);	//malloc(100)是void *型,把它转换为int *型

 Avis

        Ne pas comprendre "pointant vers un type vide" comme des données pouvant pointer vers "n'importe quel type", mais doit être compris comme "pointant vers un type vide" ou "ne pointant pas vers un certain type".

exemple

        Créez un tableau dynamique, entrez les notes de 5 étudiants et utilisez une fonction pour vérifier s'il y a des étudiants avec un score inférieur à 60, et affichez des notes non qualifiées. 

#include <stdio.h>
#include <stdlib.h>				//程序中用了malloc函数,应包含stdlib.h
int main()
{	void check(int *);				//函数声明
	int *p1,i;						//p1是int型指针
	p1=(int *)malloc(5*sizeof(int));	//开辟动态内存区,将地址转换成int *型,然后放在p1中
	for(i=0;i<5;i++) 
		scanf("%d",p1+i);			//输入5个学生的成绩 
	check(p1);					//调用check函数
	return 0;
}

void check(int *p)					//定义check函数,形参是int*指针
{	int i;
	printf("They are fail:");
	for(i=0;i<5;i++)
		if(p[i]<60) printf("%d ",p[i]); 	//输出不合格的成绩 
	printf("\n");
}

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/126617479
conseillé
Classement