Type de données en langage C (2) - construction d'un type de données

Comme mentionné dans l'article précédent, il existe trois types de types de données en langage C : les types de données de base, les types de données construits et les types de pointeur.
Les types de données de base ont été décrits ci-dessus et cet article présente la construction des types de données. Les types de données construits sont en outre divisés en trois types : le type de tableau, le type de structure, le type d'union et le type d'énumération.
insérez la description de l'image ici

type de tableau

Tout d'abord, nous devons clarifier une question, pourquoi avons-nous un tableau ?
Par exemple : Maintenant, il faut compter les notes de 10 élèves. Si le type de données de base est utilisé pour définir au moins 10 variables pour stocker ces données, s'il y a 100 élèves, au moins 100 variables sont nécessaires.

float a0,a1,a2,a3,a4,a5,a6,a7,a8,a9;

Lorsque vous utilisez des types de données de base pour définir des variables, s'il existe de nombreuses variables du même type, il sera plus difficile à définir. Si vous utilisez des tableaux pour résoudre les problèmes ci-dessus, ce sera très pratique,

float a[10];

Une seule instruction est nécessaire pour réaliser la définition de plusieurs variables du même type. En revanche, les avantages des tableaux sont mis en évidence, c'est pourquoi nous avons besoin de tableaux. Avec ce problème pratique, il nous est plus facile de comprendre le concept d'un tableau - une collection de données du même type.
Tableaux et éléments de tableau : Un tableau est une collection de données du même type représentées par un nom, et ce nom est appelé le nom du tableau. Les données du tableau sont stockées dans des variables distinguées par des indices, et ces variables sont appelées variables d'indice ou éléments de tableau. Chaque variable d'indice est équivalente à une variable simple, et le type du tableau est également le type de données de la variable d'indice du tableau. Le tableau appartient au type de structure et les données du type de structure sont composées des données de type de base selon certaines règles.
Les tableaux utilisés en langage C incluent les tableaux unidimensionnels et les tableaux multidimensionnels.

tableau unidimensionnel

Définition de tableau unidimensionnel

Forme de définition :
nom du tableau de type de données [expression constante] ;

"Type de données": est le type de données des éléments du tableau.
"Nom du tableau" : suivez les règles d'identification du langage C.
"Expression constante" : indique le nombre d'éléments dans le tableau, c'est-à-dire la longueur du tableau. Il peut s'agir d'une constante entière, d'une expression constante entière ou d'une constante symbolique.

int a[5];

Un tableau unidimensionnel a est défini, int signifie que chaque élément de a dans le tableau est un entier, le nom du tableau est a et ce tableau a 5 éléments. L'indice du tableau commence à 0, donc les 6 éléments du tableau a défini ci-dessus sont a[0], a[1], a[2], a[3], a[4], qui sont stockés en permanence en mémoire, et le tableau La première adresse du tableau est l'adresse de a[0], et le nom du tableau représente la première adresse du tableau (l'adresse est très importante et sera utilisée dans le pointeur), c'est-à-dire la valeur de a et la valeur d'adresse de a[0] (&a[0] )Same.

Référence de tableau 1D

Forme de référence :
nom du tableau [expression en indice] ;

Parmi eux, "l'expression en indice": il ne peut s'agir que d'une constante entière ou d'une expression entière.
Note : L'indice commence à 0 (la borne inférieure est 0), et l'indice maximum (borne supérieure) du tableau est la longueur du tableau moins 1.

	int a[10];
	a[0]=0;
	scanf("%d",&a[10]);/*下标越界*/

La troisième ligne du code ci-dessus est mal utilisée, l'indice du tableau ne peut atteindre que (n-1) chiffres et n est le nombre d'éléments du tableau.

Initialisation de tableau unidimensionnel

1. Lors de la définition d'un tableau. Initialiser tous les éléments du tableau

int a[5]={
    
    0,1,2,3,4};

La valeur de a[0] est 0, la valeur de a[1] est 1,..., la valeur de a[4] est 4.
Lors de l'attribution de valeurs initiales à tous les éléments du tableau, la longueur du tableau peuvent être spécifiés différemment, tels que :

int a[]={
    
    0,1,2,3,4};

Le système définit la longueur du tableau a comme 5 selon le nombre de valeurs initiales.
2. Lors de la définition d'un tableau, attribuez des valeurs initiales à certains éléments du tableau

int a[5]={
    
    0,1,2};

La valeur de a[0] est 0, la valeur de a[1] est 1, la valeur de a[2] est 2 et le reste des éléments est 0.

Tableau à deux dimensions

Définition de tableau à deux dimensions

Forme de définition :
nom du tableau de type de données [expression constante 1] [expression constante 2] ;

[Expression constante 1] indique le nombre de lignes du tableau à deux dimensions et [Expression constante 2] indique le nombre de colonnes du tableau à deux dimensions.

float x[2][3];

Définissez x comme un tableau de 2 lignes et 3 colonnes, avec un total de six éléments, et chaque élément est de type flottant. Le système alloue un espace de stockage continu dans la mémoire pour le tableau bidimensionnel, et l'ordre d'agencement des éléments est stocké en lignes, c'est-à-dire x[0][0], x[0][1], x[ 0][2] , x[1][0], x[1][1], x[1][2]. Le nom du tableau représente la première adresse du tableau.
Un tableau bidimensionnel peut être considéré comme un type spécial de tableau unidimensionnel, et le tableau x peut être considéré comme un tableau unidimensionnel contenant deux grands éléments, et chaque élément est un tableau unidimensionnel contenant trois éléments.
x[0]------x[0][0], x[0][1], x[0][2]
x[1]------x[1][0] , x[1][1], x[1][2]
x[0] est la première adresse de la première ligne du tableau à deux dimensions, c'est-à-dire l'adresse de x[0][0], et x[1] est le tableau à deux dimensions La première adresse de la deuxième ligne, c'est-à-dire l'adresse de x[1][0].

référence à un tableau à deux dimensions

Forme de référence :
nom du tableau [expression d'indice de ligne] [expression d'indice de colonne]
Note : les indices de ligne et de colonne d'un tableau à deux dimensions commencent à 0 (la borne inférieure est 0)

int a[3][4];
a[0][0]=3;
a[0][1]=a[0][0]+10;	

Référence d'erreur :

a[3][4]=3;/*下标越界*/
a[1,2]=1;/*应写成a[1][2]=1;*/

Initialisation de tableau à deux dimensions

1. Affectez la valeur initiale par ligne :

int a[2][3]={
    
    {
    
    1,2,3},{
    
    4,5,6}};

Résultat de l'initialisation :
première ligne : 1 2 3
deuxième ligne : 4 5 6
2. Attribuez des valeurs initiales à chaque élément dans l'ordre dans lequel les éléments du tableau sont disposés en mémoire :

int a[2][3]={
    
    1,2,3,4,5,6};

Résultat de l'initialisation :
première ligne : 1 2 3
deuxième ligne : 4 5 6
3. Attribuez des valeurs initiales à certains éléments :

int a[2][3]={
    
    {
    
    1},{
    
    4}};

Résultat d'initialisation :
première ligne : 1 0 0
deuxième ligne : 4 0 0

Remarque spéciale - Tableaux de caractères

Semblables aux tableaux d'entiers et aux tableaux réels précédents, les tableaux de caractères sont également un type de tableau. Alors pourquoi le tableau de caractères devrait-il être élevé séparément ? Il est différent des autres types de tableaux. S'il s'agit d'un tableau d'entiers, il stocke des données entières. S'il s'agit d'un tableau réel, il stocke des données réelles. Mais les tableaux de caractères peuvent stocker à la fois des données de caractères et des chaînes, et les chaînes ne peuvent être stockées que dans des tableaux de caractères , ce qui est sa particularité.

chaîne

Pour savoir si les données de caractères stockées dans le tableau de caractères sont toujours une chaîne, la première chose à comprendre est la différence entre un caractère et une chaîne. La différence entre un caractère et une chaîne est de savoir s'il y a une marque de fin de chaîne ('\0'). S'il y a un indicateur de fin de chaîne, c'est une chaîne, sinon c'est un caractère.

char a[5]={
    
    'C','h', 'i', 'n', 'a' };
char b[6]={
    
    'C','h', 'i', 'n', 'a' , '\0'};

Comme indiqué dans les deux lignes de code ci-dessus, il n'y a pas de marque de fin de chaîne ('\0') dans le tableau a, donc les caractères stockés dans le tableau a sont 'C', 'h', 'i', 'n ', 'a'; et '\0' sont contenus dans le tableau b, et la chaîne China est stockée dans le tableau b.

Initialisation des tableaux de caractères

1. Utilisez des constantes de caractères pour attribuer des valeurs initiales

char a[5]={
    
    'C','h', 'i', 'n', 'a' };

Le tableau a stocke des données de 5 caractères, pas des chaînes, et chaque élément de tableau et indice correspond à un tableau d'entiers.

char b[6]={
    
    'C','h', 'i', 'n', 'a' , '\0'};

Comme b[5]='\0' dans le tableau b, les chaînes sont stockées dans le tableau b.

2. Affectez la valeur initiale avec une constante de chaîne

char str[10]= {
    
    "a string"};
char str[10]= "a string";

Les deux lignes de code ci-dessus ont la même fonction et stockent toutes deux une chaîne (une chaîne) dans le tableau str.

char a[3][10]={
    
    "basic","pascal","c"};

Le tableau a comporte trois lignes et chaque ligne stocke une chaîne.
Cela montre également que si la longueur du tableau est supérieure à la longueur du contenu assigné, le système remplira automatiquement '\0' dans la position restante, et le contenu stocké dans le tableau deviendra une chaîne. comme:

char s3[7]={
    
     's', 't', 'r', 'i', 'n', 'g'};

La longueur du tableau de caractères est de 7 chiffres, mais l'utilisateur n'attribue que 6 chiffres lors de l'attribution d'une valeur, puis le système remplira automatiquement le septième chiffre avec '\0', c'est-à-dire s3[7]='\0'

3. Omission de longueur lors de l'initialisation

char s1[ ]= "Good morning!";

À ce moment, la longueur du tableau s1 est de 14 et s1[13]='\0'. Une chaîne est stockée dans le tableau s1.

char s2[ ]={
    
     's', 't', 'r', 'i', 'n', 'g'};

À ce moment, la longueur du tableau s2 est de 6. Il n'y a pas de marqueur de fin de chaîne dans le tableau. Par conséquent, il ne peut pas être utilisé comme chaîne.

référence au tableau de caractères

Les références aux tableaux de caractères peuvent être divisées en références à des éléments individuels du tableau de caractères et en références à l'ensemble du tableau de caractères. Les références aux éléments individuels des tableaux de caractères sont les mêmes que pour les tableaux d'entiers et de réels. La référence globale au tableau de caractères se manifeste principalement sur l'entrée et la sortie.

char c[ ]= "China";
printf("%s",c);

Où c est le nom du tableau, représentant la première adresse du tableau. La sortie est la Chine.

char c[10];
scanf("%s",c)

Si l'entrée est Beijing, la chaîne "Beijing" est stockée dans le tableau.

résumé du tableau

Un tableau est une collection représentant un ensemble de données du même type et est utilisé lorsque plusieurs variables du même type sont requises. Divisé en tableaux unidimensionnels et tableaux multidimensionnels.
La première chose à noter est que l'indice du tableau ne peut pas franchir la limite. L'indice du tableau commence à partir de 0 et l'indice ne peut pas franchir la limite lors de la définition ou de la citation. C'est une erreur souvent commise.
Le deuxième point est l'adresse du tableau. L'adresse est très importante dans la référence de pointeur suivante. Il est nécessaire de préciser que le nom du tableau représente la première adresse du tableau et quelle est la première adresse de chaque ligne des deux. tableau dimensionnel. La façon dont les adresses des éléments du tableau sont allouées dans l'ordinateur est utile pour l'apprentissage ultérieur des pointeurs.

Type d'ouvrage

Le type de tableau est très pratique et flexible pour le traitement de données à grande échelle, mais il comporte également certaines restrictions, c'est-à-dire que les éléments d'un même tableau doivent tous appartenir au même type de données. Existe-t-il un type de données pouvant regrouper différents types de données ? Ensuite, il y a les structures et les syndicats.
Une structure est composée de plusieurs éléments de données, et chaque élément de données qui compose une structure est appelé membre de structure. Les types de données de chaque membre de la structure peuvent être différents. Avant d'utiliser des données de type de structure, le type de structure doit d'abord être défini. La forme générale d'une définition de structure :

struct 结构体名
{
    
    数据类型1 成员名1;
 数据类型2 成员名2...
 数据类型n 成员名n;
};

Parmi eux, struct est un mot clé du langage C, qui indique la définition du type de structure. Le dernier point-virgule marque la fin de la définition du type de structure. Les membres de la structure peuvent être de n'importe quel type de données autorisé par le langage C. Par exemple:

struct bookcard
{
    
    char num[10];
 char mane[30];
 char author[30];
 char publisher[60];
 float price;
 int n;
};

Remarque : La définition du type de structure ne montre que la composition du type, le système ne lui alloue pas d'espace mémoire et le système de compilation alloue uniquement de l'espace mémoire pour les variables, donc l'espace occupé par la structure est égal à l'espace occupé par chaque membre de la structure .et . Le type d'un membre de structure peut également être un autre type de structure.

Définition de la variable de type structure

1. Utilisez le type de structure défini pour définir des variables
Cette méthode doit être utilisée lorsque plusieurs fonctions d'un programme doivent définir des variables du même type de structure, et le type de structure doit être défini comme un type global, sous la forme d'un nom de structure
struct variable Célèbre montre;

struct student
{
    
    char num[8];name[20];sex;
 int age;
 float score;
};
void main()
{
    
    struct student a;
...
}
f1()
{
    
    struct student b;
...
}

Étant donné que le type d'étudiant struct est défini en dehors de la fonction, il s'agit d'une variable globale, il peut donc être utilisé pour définir les variables de structure a et b dans la fonction principale et la fonction f1.
2. Définir des variables lors de la définition du type de structure
Cette méthode est généralement utilisée pour définir des variables externes, et ce nom de type de structure peut également être utilisé pour définir des variables locales dans chaque fonction. La forme est :
struct structure name
{table de définition de membre ;
} table de noms de variable ;

struct student
{
    
    char num[8];name[20];sex;
 int age;
 float score;
}st[30];
void main()
{
    
    struct student s;
...
}
f1()
{
    
    struct student x;
...
}

Une seule variable de type structure étudiant ne peut décrire que les informations d'un seul étudiant, et s'il est nécessaire de sauvegarder les informations de 30 étudiants, un tableau de type structure peut être défini. Comme indiqué ci-dessus, un tableau de structure externe est défini lors de la définition du nom de type global, et la méthode de définition est la même que pour les autres types de définitions de tableau. Chaque élément de ce tableau est une variable de type structure. L'utilisation combinée de ces deux types de construits le rend plus général pour le traitement des données.

3. Définir directement la variable de type de structure
Cette méthode peut être utilisée lorsqu'il n'y a qu'un seul endroit dans le programme qui a besoin d'une certaine variable de type de structure. Dans cette méthode, le nom du type de structure n'est pas spécifié et la forme est la suivante :
struct
{table de définition de membre ;
} table de noms de variable ;

void main()
{
    
    struct
 {
    
    char num[8],name[30],sex;
  int age;
  float score;
 }st[30],a,b,c;
 int i,j;
 ...
}

Initialisation des variables de structure

Lors de la définition d'une variable de structure, vous pouvez également attribuer des valeurs initiales à ses membres. La table de valeurs initiales est entourée de "{}", et les données de la table sont séparées par des virgules, et le nombre de membres doit être le même que celui de la définition du type de structure, et le type doit être le même. Si le nombre de valeurs initiales est inférieur au nombre de membres de la structure, les membres sans valeurs initiales se voient attribuer la valeur 0. Si le nombre de valeurs initiales dépasse le nombre de membres de la structure, une erreur de compilation se produit.
Exemple : Initialisation de la variable de structure :

struct date
{
    
    int year,month,day;};
struct student
{
    
    char num[8],name[30],sex;
 struct date birthday;
 float score;
}a={
    
    "40826011","Li ming","M",{
    
    1991,2,9},87.5},
 b={
    
    "40826025","Zhang qiang","F",{
    
    1990,5,12},85},c,d;

Initialisation d'un tableau de structures :

struct s
{
    
    char num[8],name[30],sex;
 float score;
}stu[3]={
    
    
		{
    
    "40826011","Li ming","M",87.5},
		{
    
    "40826025","Zhang qiang","F",85},
		{
    
    "40826032","Wang xinping","F",90}
		};

Formes de référence des membres variables de structure

La forme générale de référencement des membres de la variable de structure est la suivante :
nom de la variable de structure. nom du membre
où "." est un opérateur de composant avec le niveau d'opération le plus élevé. Par exemple, dans le premier morceau de code de l'initialisation de la variable de structure, les membres de a peuvent être exprimés sous la forme a.num, a.name, a.sex, a.birthday et a.score. a, b, c et d sont des variables du même type, et a.num, b.num, c.num et d.num peuvent être utilisés pour distinguer les membres respectifs du même nom num.
Pointeur de structure : struct student *p ;
Par exemple :

struct code
{
    
    int n;
 char c;
}a,*p=&a;

p est un pointeur de structure pointant vers a, et il existe trois manières de faire référence aux membres de la variable a :
1.an, ac sélectionner les membres par opération de composant sur les noms de variables ;
2.(*p).n,(*p) .c : utilise l'opérateur de stockage indirect de la variable pointeur pour accéder à la variable cible ;
3.p->n,p->c : il s'agit d'une forme spécialement utilisée pour les variables pointeur de structure pour faire référence aux membres de la structure, ce qui équivaut à la seconde forme.

Type de syndicat

Une union est similaire à un type de construction qui partage des structures de stockage de différents types de données, c'est-à-dire que tous les membres d'une variable d'union occuperont le même espace de stockage. Cela montre également que l'espace occupé par le syndicat est égal à l'espace maximum occupé par ses membres . L'avantage d'utiliser ce type de données est d'économiser de l'espace de stockage.
La forme générale d'une définition de type d'union est :

union 共用体名
{
    
    数据类型1 成员名1;
 数据类型2 成员名2...
 数据类型n 成员名n;
 }

Parmi eux, union est un mot clé du langage C, qui indique la définition du type d'union. Le dernier point-virgule marque la fin de la définition du type d'union. Les membres de l'union peuvent être n'importe quel type de données autorisé par le langage C. Par exemple:

union utype
{
    
    int i;
 char ch;
 long l;
 char c[4];
};

Définition d'une variable union

La forme de définition de la variable de type union est similaire à la définition de la variable de structure.
1. union nom du corps de l'union table des noms de variables ;
2. union nom du corps de l'union
{table de définition des membres ;
} table des noms de variable ;

3. union
{table de définition des membres ;
} table des noms de variable ;

Références aux membres des variables d'union

Comme pour le type de variable de structure, il existe également 3 formes de références aux membres de l'union

union u
{
    
    char u1;
 int u2;
}x,*p=&x;

La forme de référence est :
1.x.u1,x.u2 ;
2.(*p).u1,(*p).u2 ;
3.p->u1,p->u2 ;

Je suppose que tu aimes

Origine blog.csdn.net/Tao_9/article/details/129711370
conseillé
Classement