C | connaissance des tableaux (1)

Ersansui 2021-10-14 06:44:24
connaissance des tableaux


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://qdmana.com/2021/10/20211014064419889u.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é)