C | connaissance pertinente du tableau (2)

Ersansui 2021-10-14 06:44:29
connaissance pertinente du tableau


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://qdmana.com/2021/10/20211014064424375v.html

  1. Html + CSS + JS implémentation ️ Responsive Lucky Turnover ️ [with full source Sharing]
  2. Ren Jialun, who married young, was in a mess. Now she feels that it is a blessing in disguise
  3. 达梦数据库使用disql生成html格式的巡检报告
  4. React render phase parsing II - beginwork process
  5. Tableau linéaire de la structure des données (dessin à la main)
  6. In 2022, what are the highlights and popular elements in skirts to make skirts more elegant and gentle?
  7. JQuery installation
  8. Exemple de développement Android, dernière compilation de questions d'entrevue Android
  9. Differences and relations between JDK, JRE and JVM, nginx architecture diagram
  10. 【Azure 云服务】Azure Cloud Service 为 Web Role(IIS Host)增加自定义字段 (把HTTP Request Header中的User-Agent字段增加到IIS输出日志中)
  11. 【Azure 云服务】Azure Cloud Service 为 Web Role(IIS Host)增加自定义字段 (把HTTP Request Header中的User-Agent字段增加到IIS输出日志中)
  12. Questions d'entrevue pour les ingénieurs en développement Android, Android Foundation 72 questions
  13. It's kind of Cadillac CT6 to have a Mercedes Benz S-class captain and a 10At entry-level configuration, falling to less than 300000
  14. H6 meets the strong enemy again! The car body has a Cayenne visual sense, breaking 8.8 seconds, and the top configuration is less than 130000
  15. How nginx supports HTTPS and Linux kernel video tutorial
  16. Le martyr se réjouit de sa vieillesse Audi R8 V10 performance Rwd
  17. import 方式隨意互轉,感受 babel 插件的威力
  18. Le mode d'importation peut se déplacer librement pour sentir la puissance du plug - in Babel
  19. Pas de héros en termes de ventes!Du point de vue de la force du produit, la nouvelle version ax7 Mach est plus forte que H6
  20. The vue3 + TS project introduces vant as needed
  21. 深入浅出虚拟 DOM 和 Diff 算法,及 Vue2 与 Vue3 中的区别
  22. 深入淺出虛擬 DOM 和 Diff 算法,及 Vue2 與 Vue3 中的區別
  23. Explorer les algorithmes DOM et diff virtuels et les différences entre vue2 et vue3
  24. 两万字Vue基础知识总结,小白零基础入门,跟着路线走,不迷路(建议收藏)
  25. Résumé des connaissances de base de 20 000 mots vue, Introduction à la petite base blanche zéro, suivre la route et ne pas se perdre (Collection recommandée)
  26. 兩萬字Vue基礎知識總結,小白零基礎入門,跟著路線走,不迷路(建議收藏)
  27. "Talk show conference 4" Zhou qimo a remporté le championnat. Tout le monde l'admire. Il est mature et stable et a une vue d'ensemble
  28. Test logiciel entrevue non technique questions classiques - mise à jour continue!
  29. Digital forward disassembly reverse disassembly
  30. Analyse du cache distribué redis et essence de l'entrevue en usine v6.2.6
  31. [Hadoop 3. X series] use of HDFS rest HTTP API (II) httpfs
  32. Zhang Daxian sang in the morning to bless the motherland, xYG team: singing is much better than us
  33. My three years' experience -- avoiding endless internal friction
  34. Introduction à l'algorithme "dénombrement binaire" modéré 01 - - question d'entrevue leetcode 10.09. Recherche de matrice de tri
  35. Introduction à l'algorithme simple 06 - - leetcode 34. Trouver la première et la dernière position d'un élément dans un tableau de tri
  36. CSS animation
  37. Explain the new tags in HTML5 and the pseudo classes and pseudo elements in CSS3
  38. They are all talking about "serverless first", but do you really understand serverless?
  39. [apprentissage de l'algorithme] 1486. Fonctionnement exclusif du tableau (Java / C / C + + / python / go / Rust)
  40. Front and back end data interaction (VI) -- advantages, disadvantages and comparison of Ajax, fetch and Axios
  41. Front and back end data interaction (V) -- what is Axios?
  42. Front and back end data interaction (III) -- Ajax encapsulation and call
  43. 前端 100 万行代码是怎样的体验?
  44. 湖中剑 前端周刊 #10(ESLint8、Web 端侧 AI、react-if)
  45. 湖中劍 前端周刊 #10(ESLint8、Web 端側 AI、react-if)
  46. 前端 100 萬行代碼是怎樣的體驗?
  47. Huzhong Sword Front End Weekly # 10 (eslint8, Web end ai, React if)
  48. Quelle est l'expérience du premier million de lignes de code?
  49. Pancakeswap front-end source compilation and deployment Linux
  50. Pancakeswap front-end source compilation - Windows
  51. Walls and columns are powered, and 50W transmission power is available in any corner. The University of Tokyo has built a wireless charging house
  52. Pas besoin d'embrayage pour allumer une voiture?Vieux conducteur: la voiture est très blessée par des erreurs. Ces mauvaises habitudes doivent être changées!
  53. Cadre de développement Android MVP, résumé de l'entrevue
  54. [Azure Cloud Service] Azure Cloud Service ajoute des champs personnalisés pour le rôle Web (hôte IIS) (ajoute le champ user agent dans l'en - tête de demande http au Journal de sortie IIS)
  55. Principes de la plate - forme de développement Android, questions d'entrevue de développement Android
  56. [Azure Cloud Service] Azure Cloud Service ajoute des champs personnalisés pour le rôle Web (hôte IIS) (ajoute le champ user agent dans l'en - tête de demande http au Journal de sortie IIS)
  57. Weilai es8 was listed in Norway and SAIC's driverless concept car appeared at the World Expo
  58. One of the most high-frequency algorithm problems in the front end! Reverse linked list
  59. Échange de doigts d'épée 11. Nombre minimum de tableaux rotatifs
  60. Questions et réponses à l'entrevue Big Data (réimprimé)