编程知识 cdmana.com

C | connaissance pertinente du tableau (2)

Préface

La dernière fois,Nous avons appris à créer des tableaux unidimensionnels et bidimensionnels、Initialisation et utilisation,Alors aujourd'hui, continuons à apprendre sur les tableaux~~

Insérer la description de l'image ici

Tableau hors de portée

Nous devrions tous savoir,L'indice du tableau est limité par la portée.

L'indice du tableau est spécifié à partir de0Au début.Si le tableau a un total denLes mots des éléments,Alors la valeur maximale de l'indice estn-1,C'est - à - dire que le dernier élément du tableau est indexé commen-1Éléments de.

Mais,Si on accède au tableau,Si l'indice d'accès est supérieur àn-1Ou moins0Éléments de,À ce stade, nous accédons à un espace qui dépasse la portée légale du tableau,C'est ce qu'on appelle l'accès hors ligne au tableau.

Ce qui exige notre attention,CLa langue elle - même ne vérifie pas les indices de tableau,Et le compilateur ne signale pas nécessairement d'erreurs.

Certains compilateurs signalent des erreurs,Et certains compilateurs ne font pas d'erreurs.

Quand le tableau est hors de portée,Ce n'est pas parce que le compilateur ne signale pas d'erreur que le Code que nous avons écrit est correct,En tant que programmeurs,Assurez - vous de bien vérifier,Empêcher les tableaux de dépasser les limites.

Les erreurs suivantes sont faciles à faire par nos débutants:

#include <stdio.h>
int main()
{
    
	int arr[10] = {
     1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	for (i = 0; i <= 10; i++)
	{
    
		//Quandiégal à10Quand,J'ai dépassé les bornes.
		//Indice de0ÀnC'est tout.11Éléments
		printf("%d\n", arr[i]);//Quandiégal à10Quand,J'ai dépassé les bornes.
	}
	return 0;
}

Paramètre de transfert de tableau

Pendant que nous écrivons le Code , Il est souvent nécessaire de passer un tableau comme argument à une fonction ,À ce stade,, On va facilement faire des erreurs .

Prenons par exemple le tri des bulles :

#include <stdio.h>

// Définir une fonction pour réaliser le tri des bulles 
void bubble_sort(int arr[])
{
    
	int sz = sizeof(arr) / sizeof(arr[0]);//C'est ça??
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
    
		int j = 0;
		for (j = 0; j < sz - i - 1; j++)
		{
    
			if (arr[j] > arr[j + 1])
			{
    
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}


int main()
{
    
	int arr[] = {
     3,1,7,5,8,9,0,2,4,6 };
	bubble_sort(arr);
	for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
    
		printf("%d ", arr[i]);
	}
	return 0;
}

Je me demande si les gars pensent que le code ci - dessus va fonctionner ?

La réponse est non.. En débogage, nous pouvons savoir ,À l'intérieur de la fonctionszLa valeur de1(32Environnement binaire),Pourquoi est - ce arrivé?

Parce qu'après avoir passé les paramètres du tableau ,Le nom du tableau indique l'adresse du premier élément,La taille de l'adresse est4Octets ou8Octets.

Nous devons donc nous souvenir d'une conclusion

Conclusions

1. Le nom du tableau représente dans la plupart des cas l'adresse du premier élément

2. Il n'y a que deux exceptions ,Un.&Nom du tableau,Deux.sizeof(Nom du tableau)

&Nom du tableau,L'adresse du tableau est prise.&Nom du tableau,Le nom du tableau représente l'ensemble du tableau.

sizeof(Nom du tableau),Calculer la taille du tableau entier,sizeof Un seul nom de tableau est placé à l'intérieur , Le nom du tableau indique le nombre entier
Groupe.

Donc,, Nous devons apporter quelques modifications au Code de tri des bulles ci - dessus :

void bubble_sort(int arr[], int sz)// Le paramètre reçoit le nombre d'éléments du tableau 
{
    
	// Code identique à la fonction ci - dessus 
}

int main()
{
    
	int arr[] = {
     3,1,7,5,8,9,0,2,4,6 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr,sz);
	for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
    
		printf("%d ", arr[i]);
	}
	return 0;
}

Les gars, rappelez - vous , .Il n'est pas possible de déterminer la taille d'un tableau à l'intérieur d'une fonction en passant le nom du tableau obtenu par un paramètre !

Tableau de caractères

Tableau de caractères et chaînes

InC Il n'y a pas de chaîne de ce type de données dans la langue , Donc, quand nous avons besoin de stocker la chaîne , Un tableau de caractères est nécessaire pour stocker .

Quand nous utilisons des tableaux de caractères pour stocker des chaînes , Rappelez - vous qu'une chaîne est habituellement suivie d'un ‘\0’Pour marquer la fin de la chaîne, Donc, en stockant la chaîne , Assurez - vous que la longueur du tableau de caractères est au moins plus grande que la longueur de la chaîne qu'il contient 1.

Sortie de la chaîne

La sortie d'une chaîne de caractères peut être sortie par caractère ou par chaîne de caractères .

La démonstration de code est la suivante::

//Méthode 1
char arr[10] = "hello!";
int i = 0;
for( i = 0; arr[i] != '\0'; i++)
{
    
	printf("%c",arr[i]);
}
 
//Méthode 2
char arr[10] = "hello!";
printf("%s",arr);

//Méthode III
char arr[10] = "hello!";
printf(arr);

Entrée de la chaîne

Il y a aussi plusieurs façons d'entrer une chaîne .

L'entrée peut se faire par caractère ou par %s Mode d'entrée

La démonstration de code est la suivante::

//Méthode 1
char arr[20] = {
     0 };
int i = 0;
for (i = 0; arr[i] = getchar() != '\n'; i++)
{
    
	;
}
arr[i] = '\0';


//Méthode 2
char arr[20] = {
     0 };
scanf("%s", arr);

Conclusion

C'est bon., La connaissance des tableaux est presque terminée ici !

S'il y a encore des connaissances qui n'ont pas été mentionnées ou qui ont mal tourné ,Bienvenue à laisser un message dans la section commentaires~

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/20211014064424375v.html

Scroll to Top