Explication détaillée de l'utilisation de struct en langage C
En langage C, vous pouvez utiliser une structure ( Struct) pour stocker un groupe différents types de données. La forme de définition d'une structure est :
struct 结构体名{ 结构体所包含的变量或数组 };
Une structure est une collection qui contient plusieurs variables ou tableaux. Leurs types peuvent être identiques ou différents. Chacune de ces variables ou tableaux est appelé Est un membre de la structure.
Recommander "Tutoriel Langage C"
Veuillez regarder l'exemple suivant :
struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在学习小组 float score; //成绩 };
stu est le nom de la structure, qui contient 5 membres , respectivement nom, numéro, âge, groupe, score. Les membres de la structure sont définis de la même manière que les variables et les tableaux, sauf qu'ils ne peuvent pas être initialisés.
Faites attention au point-virgule après les accolades ; il ne peut pas manquer, c'est une déclaration complète.
Une structure est également un type de données, qui est défini par le programmeur et peut contenir plusieurs autres types de données.
Les types de données tels que int, float, char, etc. sont fournis par le langage C lui-même et ne peuvent pas être divisés. Nous les appelons types de données de base ; et les structures peuvent également contenir plusieurs types de données de base. Peut contenir d'autres structures, que nous appelons types de données complexes ou types de données construits.
Variables de structure
La structure étant un type de données, vous pouvez l'utiliser pour définir des variables. Par exemple :
struct stu stu1, stu2;
définit deux variables stu1 et stu2, toutes deux de type stu et composées de 5 membres. Notez que le mot clé struct ne peut pas manquer.
stu est comme un "modèle", et les variables définies ont les mêmes propriétés. La structure peut également être comparée à un « dessin » et les variables de structure à des « pièces ». Les pièces réalisées à partir du même dessin ont les mêmes caractéristiques.
Vous pouvez également définir des variables de structure lors de la définition de la structure :
struct stu{
char *name; //Name
int num ; Numéro d'étudiant
âge int; //Âge
groupe de caractères; //Groupe d'étude
score flottant; //Score
} stu1, stu2;
Mettez simplement la variable à la fin de la définition de la structure.
Si vous n'avez besoin que de deux variables, stu1 et stu2, et que vous n'avez pas besoin d'utiliser le nom de la structure pour définir d'autres variables ultérieurement, vous n'avez pas besoin de donner le nom de la structure lors de la définition, comme suit :
struct{ //No stu
char *name; //Nom
int num; //Numéro d'étudiant
int age;
char group; //Groupe d'étude
float score; //Score
} stu1, stu2;
C'est simple à écrire, mais parce que il n'y a pas de nom de structure, vous ne pouvez pas utiliser cette structure pour définir de nouvelles variables ultérieurement.
Théoriquement parlant, chaque membre de la structure est stocké en continu dans la mémoire, ce qui est très similaire à un tableau. Par exemple, la distribution en mémoire des variables de structure ci-dessus stu1 et stu2 est celle indiquée dans la figure ci-dessous. , occupant un total de 4+4+ 4+1+4 = 17 octets.
Cependant, dans l'implémentation spécifique du compilateur, il peut y avoir des écarts entre chaque membre pour stu1 et stu2, il y a un remplissage vide de 3 octets entre le groupe de variables membres et le score (voir la figure ci-dessous) . Calculés de cette manière, stu1 et stu2 occupent en réalité 17 + 3 = 20 octets.
Concernant les raisons des « fissures » entre les variables membres, nous les expliquerons en détail dans la section « Alignement de la mémoire du langage C pour améliorer l'efficacité de l'adressage » dans la rubrique « Essentiels de la mémoire du langage C ».
Acquisition et affectation de membres
Les structures sont similaires aux tableaux. Elles constituent également une collection de données et leur utilisation globale n'a pas beaucoup de sens. Les tableaux utilisent l'indice [ ] pour obtenir un seul élément et les structures utilisent des points pour obtenir un seul membre. Le format général pour obtenir les membres de la structure est :
结构体变量名.成员名;
De cette façon, vous pouvez obtenir la valeur du membre, et vous pouvez également attribuer une valeur au membre :
#include <stdio.h> int main(){ struct{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 } stu1; //给结构体成员赋值 stu1.name = "Tom"; stu1.num = 12; stu1.age = 18; stu1.group = 'A'; stu1.score = 136.5; //读取结构体成员的值 printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score); return 0; }
Résultat d'exécution :
Tom's Le numéro d'étudiant est de 12, l'âge est de 18 ans, et dans le groupe A, le score de cette année est de 136,5 !
En plus d'attribuer des valeurs aux membres un par un, vous pouvez également attribuer des valeurs dans leur ensemble lors de la définition, par exemple :
struct{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 } stu1, stu2 = { "Tom", 12, 18, 'A', 136.5 };
Cependant, l'affectation globale est limitée au moment où définir des variables de structure, et vous ne pouvez leur attribuer des valeurs que pendant l'utilisation. Les membres se voient attribuer des valeurs une par une, ce qui est très similaire à l'attribution de tableaux.
Il convient de noter que la structure est un type de données personnalisé, qui est un modèle pour créer des variables et n'occupe pas d'espace mémoire ; seules les variables de structure contiennent des données réelles et nécessitent de l'espace mémoire pour être stockées.
Pour plus de contenu lié à la programmation, veuillez faire attention à la colonne Introduction à la programmation sur le site Web PHP chinois !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!