Maison  >  Article  >  développement back-end  >  Quel est l’ordre dans lequel les tableaux bidimensionnels sont stockés en mémoire en langage C ?

Quel est l’ordre dans lequel les tableaux bidimensionnels sont stockés en mémoire en langage C ?

青灯夜游
青灯夜游original
2021-07-12 11:47:4527987parcourir

L'ordre de stockage des tableaux bidimensionnels en mémoire est ligne par ligne, c'est-à-dire qu'après le placement d'une ligne, la deuxième ligne est placée ; c'est-à-dire que la ligne « a[0] » est stockée en premier, et puis la ligne "a[1]" est stockée. Ensuite, stockez la ligne "a[2]", et ainsi de suite jusqu'à ce que tous les éléments soient placés ; les éléments de chaque ligne sont également stockés dans l'ordre.

Quel est l’ordre dans lequel les tableaux bidimensionnels sont stockés en mémoire en langage C ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, version c99, ordinateur Dell G3.

La forme générale d'une définition de tableau bidimensionnel est :

dataType arrayName[length1][length2];

où dataType est le type de données, arrayName est le nom du tableau, length1 est la longueur de l'indice de la première dimension et length2 est la longueur de l'indice de la deuxième dimension .

Nous pouvons considérer un tableau bidimensionnel comme un tableau Excel, avec des lignes et des colonnes, la longueur 1 représente le nombre de lignes et la longueur 2 représente le nombre de colonnes. Pour localiser un élément dans un tableau bidimensionnel, les lignes et les colonnes. les colonnes doivent être spécifiées. Par exemple :

int a[3][4];

définit un tableau bidimensionnel avec 3 lignes et 4 colonnes, avec un total de 3×4=12 éléments. Le nom du tableau est a, c'est-à-dire :

a[0][0], a[0][1], a[0][2], a[0][3]
a[1][0], a[1][1], a[1][2], a[1][3]
a[2][0], a[2][1], a[2][2], a[2][3]

Si vous souhaitez représenter les éléments. dans la ligne 2 et la colonne 1, vous devez écrire un[2][1].

Vous pouvez également considérer un tableau bidimensionnel comme un système de coordonnées avec un axe x et un axe y. Pour déterminer un point dans un plan, vous devez connaître à la fois l'axe x et l'axe y.

Un tableau bidimensionnel est conceptuellement bidimensionnel, mais est stocké en permanence en mémoire ; en d'autres termes, les éléments d'un tableau bidimensionnel sont les uns à côté des autres, sans aucun espace entre eux. Alors, comment stocker des tableaux bidimensionnels dans une mémoire linéaire ? Il existe deux manières :

  • L'une consiste à organiser par ligne, c'est-à-dire qu'après avoir placé une ligne, la deuxième ligne est placée

  • L'autre doit être organisée par colonne, c'est-à-dire après une colonne ; est placé, la deuxième ligne est placée Liste.

En langage C, les tableaux bidimensionnels sont disposés en lignes. C'est-à-dire que la ligne a[0] est stockée en premier, puis la ligne a[1] est stockée et enfin la ligne a[2] est stockée ; les 4 éléments de chaque ligne sont également stockés dans l'ordre. Le tableau a est de type int, chaque élément occupe 4 octets et l'ensemble du tableau occupe un total de 4 × (3 × 4) = 48 octets.

Vous pouvez y penser de cette façon, un tableau bidimensionnel est composé de plusieurs tableaux unidimensionnels de même longueur.

Par exemple :

Il y a 5 personnes dans un groupe d'étude, et chaque personne a des résultats aux tests pour 3 cours. Trouvez la note moyenne de chaque matière et la note moyenne globale du groupe.

-- Math C English
张涛 80 75 92
王正华 61 65 71
李丽丽 59 63 70
赵圈圈 85 87 90
周梦真 76 77 85

Pour cette question, vous pouvez définir un tableau bidimensionnel a[5][3] pour stocker les scores de 5 personnes dans 3 cours, définir un tableau unidimensionnel v[3] pour stocker les scores moyens de chacun sujet, puis définissez une moyenne variable pour stocker le score moyen global. La programmation finale est la suivante :

#include <stdio.h>
int main(){
    int i, j;  //二维数组下标
    int sum = 0;  //当前科目的总成绩
    int average;  //总平均分
    int v[3];  //各科平均分
    int a[5][3];  //用来保存每个同学各科成绩的二维数组
    printf("Input score:\n");
    for(i=0; i<3; i++){
        for(j=0; j<5; j++){
            scanf("%d", &a[j][i]);  //输入每个同学的各科成绩
            sum += a[j][i];  //计算当前科目的总成绩
        }
        v[i]=sum/5;  // 当前科目的平均分
        sum=0;
    }
    average = (v[0] + v[1] + v[2]) / 3;
    printf("Math: %d\nC Languag: %d\nEnglish: %d\n", v[0], v[1], v[2]);
    printf("Total: %d\n", average);
    return 0;
}

Résultats de fonctionnement :

Input score:
80 61 59 85 76 75 65 63 87 77 92 71 70 90 85↙
Math: 72
C Languag: 73
English: 81
Total: 75

Le programme utilise une boucle imbriquée pour lire les scores de tous les élèves dans toutes les matières. Dans la boucle interne, les scores de chaque étudiant dans un certain cours sont lus dans l'ordre, et ces scores sont accumulés. Après avoir quitté la boucle interne (entrée dans la boucle externe), les scores accumulés sont divisés par 5 et envoyés à v[i. ] , qui correspond à la note moyenne du cours. La boucle externe boucle trois fois au total, calcule les notes moyennes de chacun des trois cours et les stocke dans le tableau v. Une fois toutes les boucles terminées, ajoutez v[0], v[1], v[2] et divisez par 3 pour obtenir le score moyen global.

Recommandations associées : "Tutoriel vidéo sur le langage C"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn