编程知识 cdmana.com

C | connaissance des tableaux (1)

Préface

Je crois que dans n'importe quel langage de programmation,Les tableaux sont des types de données extrêmement importants.

EtCLangues,Le tableau appartient au type de construction.

Les tableaux sont largement utilisés,Il est donc nécessaire de valoriser cette connaissance.

Commençons par zéro aujourd'hui et apprenons à connaître les tableaux!

Définition du tableau

Un tableau est une collection d'éléments du même type de données.

Les éléments du tableau sont stockés en mémoire en continu.

Points de connaissance liés au tableau

Création d'un tableau unidimensionnel

Le format de création d'un tableau unidimensionnel est le suivant:

Type de données + Nom du tableau + [ Nombre d'éléments du tableau ]

La démonstration de code est la suivante::

int arr1[10];
char arr2[10];
float arr3[1];
double arr4[20];

Il est important de noter que,C99Avant la norme,CTableau de la langue à la taille spécifiée,L'utilisation de variables pour spécifier la taille n'est pas prise en charge,Même siconstLa variable constante modifiée ne fonctionne pas non plus.

La démonstration de code est la suivante::

int count1 = 10;
int arr1[count1];//C'est interdit.

const int count2 = 10;
int arr2[count2];

Initialisation d'un tableau unidimensionnel

L'initialisation d'un tableau est,Donner une valeur initiale raisonnable au contenu du tableau tout en le créant(Initialisation).

La démonstration de code est la suivante::

int arr1[10] = {
    1,2,3};
int arr2[] = {
    1,2,3,4};
int arr3[5] = {
    1,2,3,4,5};
char arr4[3] = {
    'a',98, 'c'};
char arr5[] = {
    'a','b','c'};
char arr6[] = "abcdef";

Attention!

.Un tableau doit être initialisé s'il est créé sans spécifier la taille déterminée du tableau.

Le tableau détermine le nombre d'éléments du tableau en fonction du contenu initialisé .

Mais

Les tableaux de caractères sont initialisés différemment , Il en résulte des résultats différents .

char arr1[] = "abc";
char arr2[3] = {
    'a','b','c'};

Dans les codes ci - dessus,arr1 La méthode d'initialisation par défaut sera ajoutée à la fin ‘\0’ Pour marquer la fin de la chaîne .

En ce momentarr1 Nombre d'éléments de ce tableau 4.

Etarr2 La méthode d'initialisation de ne pas ajouter ‘\0’,À ce moment - là,Si nécessairestrlen Quand la fonction calcule la longueur de la chaîne , Le résultat serait une valeur aléatoire .

Utilisation d'un tableau de bits

Accès au tableau, Il nous faut un opérateur :[ ] , Opérateur de référence indexé .

Quand on va accéder aux éléments du tableau , Ce symbole d'opération est nécessaire .

Attention!

Quand on accède au premier élément du tableau , L'indice est 0,C'est - à - dire:arr[ 0 ].

La démonstration de code est la suivante::

#include <stdio.h>
int main()
{
    
	int arr[10] = {
     0 };// Initialisation incomplète du tableau entier 
	  // Calculer le nombre d'éléments du tableau 
	int sz = sizeof(arr) / sizeof(arr[0]);
	// Assigner une valeur au contenu du tableau ,Le tableau est accessible à l'aide d'un indice,Indice de0C'est parti..Alors...:
	int i = 0;//Faire un indice
	for (i = 0; i < 10; i++)// Moins de 10 Pas besoin de signe égal , Sinon, le tableau est hors de portée 
	{
    
		arr[i] = i;
	}
	// Afficher le contenu du tableau 
	for (i = 0; i < 10; ++i)
	{
    
		printf("%d ", arr[i]);
	}
	return 0;
}

Résumé

Le tableau est accessible à l'aide d'un indice,L'indice est de0C'est parti..

La taille du tableau peut être calculée.

Stockage d'un tableau de bits en mémoire

Le stockage du tableau en mémoire est continu .

La démonstration de code est la suivante::

#include <stdio.h>
int main()
{
    
	int arr[10] = {
     0 };
	int i = 0;
	for (i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i)
	{
    
		printf("&arr[%d] = %p\n", i, &arr[i]);
	}
	return 0;
}

Quand on exécutera le code ci - dessus , Vous obtiendrez les résultats suivants
Insérer la description de l'image ici
Nous pouvons voir, L'adresse de chaque élément est continue , Et à mesure que l'indice augmente , L'adresse augmente aussi .

L'adresse de chacun des deux éléments adjacents , La valeur de la différence est égale à la taille du type de données correspondant à l'élément .

Par exemple:: Les éléments du tableau dans le code ci - dessus sont des entiers , Et la taille des données entières est 4Octets, Donc les adresses des éléments adjacents sont différentes 4.

Le diagramme de mémoire est le suivant::
Insérer la description de l'image ici

Création de tableaux 2D

La création d'un tableau binaire est similaire à la création d'un tableau unidimensionnel .

La démonstration de code est la suivante::

int arr[3][4];
char arr[3][5];
double arr[2][4];

Le premier d'entre eux[ ] Indique combien de couches le tableau a ,Deuxième[ ] Combien d'éléments y a - t - il dans chaque couche .

Chaque couche d'un tableau bidimensionnel peut être considérée comme un tableau unidimensionnel .

Donc,, Un tableau bidimensionnel peut aussi être considéré comme un tableau unidimensionnel , Et chaque élément de ce tableau est aussi un tableau unidimensionnel .

( J'ai l'impression que ~)

Initialisation du tableau 2D

Il existe plusieurs façons différentes d'initialiser un tableau 2D

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

Comme un tableau unidimensionnel , Le nombre de lignes peut être omis , Le tableau 2D est maintenant dimensionné en fonction de l'initialisation ,Mais, La colonne ne peut pas être omise .

Et quand un tableau 2D est initialisé ,Peut être ajouté{ },Facile à comprendre.

Utilisation de tableaux bidimensionnels

Les tableaux bidimensionnels sont utilisés de la même manière que les tableaux unidimensionnels , C'est aussi accessible par l'indice .

La démonstration de code est la suivante::

#include <stdio.h>
int main()
{
    
	int arr[3][4] = {
     0 };//Initialisation incomplète
	int i = 0;
	for (i = 0; i < 3; i++)// Traverser chaque ligne 
	{
    
		int j = 0;
		for (j = 0; j < 4; j++)// Traverser chaque élément d'une ligne 
		{
    
			arr[i][j] = i * 4 + j;
		}
	}
	for (i = 0; i < 3; i++)
	{
    
		int j = 0;
		for (j = 0; j < 4; j++)
		{
    
			printf("%d ", arr[i][j]);
		}
	}
	return 0;
}

Stockage en mémoire de tableaux bidimensionnels

C'est la même façon de stocker un tableau unidimensionnel , C'est continu en mémoire .

La démonstration de code est la suivante::

#include <stdio.h>
int main()
{
    
	int arr[3][4];
	int i = 0;
	for (i = 0; i < 3; i++)
	{
    
		int j = 0;
		for (j = 0; j < 4; j++)
		{
    
			printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
		}
	}
	return 0;
}

Le code ci - dessus fonctionne comme suit :

Insérer la description de l'image ici
Donc nous savons que, Les tableaux bidimensionnels sont également stockés en continu , Le premier élément de la deuxième couche est suivi du dernier élément de la première couche .

Conclusion

Aujourd'hui, nous commençons par comprendre les bases des tableaux unidimensionnels et bidimensionnels , À propos de Array Crossing et Array passing Parameters , On le met dans le prochain numéro ~

C'est un vieux dicton.,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://cdmana.com/2021/10/20211014064419889u.html

Scroll to Top