>백엔드 개발 >C#.Net 튜토리얼 >C 언어에서 2차원 배열이 메모리에 저장되는 순서는 무엇입니까?

C 언어에서 2차원 배열이 메모리에 저장되는 순서는 무엇입니까?

青灯夜游
青灯夜游원래의
2021-07-12 11:47:4528222검색

메모리에서 2차원 배열의 저장 순서는 행 단위입니다. 즉, 한 행이 배치된 후 두 번째 행이 배치됩니다. 즉, "a[0]" 행이 먼저 저장됩니다. 그런 다음 "a[1]" 행이 저장됩니다. 그런 다음 모든 요소가 배치될 때까지 "a[2]" 행을 저장합니다.

C 언어에서 2차원 배열이 메모리에 저장되는 순서는 무엇입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, c99 버전, Dell G3 컴퓨터.

2차원 배열 정의의 일반적인 형식은 다음과 같습니다.

dataType arrayName[length1][length2];

여기서 dataType은 데이터 유형이고, arrayName은 배열 이름이고, length1은 첫 번째 차원 첨자의 길이이고, length2는 두 번째 차원 첨자의 길이입니다. .

2차원 배열은 행과 열이 있는 Excel 테이블로 생각할 수 있습니다. length1은 행 수를 나타내고 length2는 2차원 배열에서 요소를 찾으려면 행과 열 수를 모두 나타냅니다. 열을 지정해야 합니다. 예:

int a[3][4];

는 총 3×4=12개의 요소로 구성된 3개의 행과 4개의 열로 구성된 2차원 배열을 정의합니다. 배열 이름은 a입니다. 즉,

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]

요소를 표현하려는 경우입니다. 행 2와 열 1에는 [2][1]을 작성해야 합니다.

2차원 배열을 x축과 y축이 있는 좌표계로 생각할 수도 있습니다. 평면의 한 점을 결정하려면 x축과 y축을 모두 알아야 합니다.

2차원 배열은 개념적으로 2차원이지만 메모리에 연속적으로 저장됩니다. 즉, 2차원 배열의 요소는 서로 간격 없이 나란히 있습니다. 그렇다면 선형 메모리에 2차원 배열을 저장하는 방법은 무엇일까요? 두 가지 방법이 있습니다.

  • 하나는 행별로 정렬하는 것입니다. 즉, 한 행을 배치한 후 두 번째 행을 배치합니다. 배치되면 두 번째 행이 List로 배치됩니다.

  • C 언어에서는 2차원 배열을 행으로 배열합니다.
  • 즉, a[0] 행이 먼저 저장되고, 그 다음 a[1] 행이 저장되고, 마지막으로 a[2] 행이 저장됩니다. 각 행의 4개 요소도 순서대로 저장됩니다. 배열 a는 int 유형이고 각 요소는 4바이트를 차지하며 전체 배열은 총 4×(3×4)=48바이트를 차지합니다.

이렇게 생각하시면 2차원 배열은 같은 길이의 1차원 배열 여러 개로 구성됩니다.

예:

스터디 그룹에 5명이 있고, 각 사람은 3개 과목의 시험 점수를 가지고 있으며, 각 과목의 평균 점수와 그룹의 전체 평균 점수를 구합니다.

--수학8061857 6이 질문에 대해 2차원 배열 a[5][3]은 3개 과목의 5명의 점수를 저장하고, 1차원 배열 v[3]을 정의하여 각 과목의 평균 점수를 저장한 후 변수 평균을 정의한다. 총 평균 점수를 저장합니다. 최종 프로그래밍은 다음과 같습니다:
#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;
}
실행 결과: 프로그램은 중첩 루프를 사용하여 모든 과목에서 모든 학생의 점수를 읽습니다. 내부 루프에서는 특정 과목의 각 학생의 점수를 순서대로 읽어서 이 점수를 누적하고, 내부 루프를 빠져나간 후(외부 루프로 진입) 누적된 점수를 5로 나누어 v[i]로 보낸다. ] 는 해당 강좌의 평균 점수입니다. 외부 루프는 총 3회 반복되며, 세 과목 각각의 평균 성적을 계산하여 배열 v에 저장합니다. 모든 루프가 완료된 후 v[0], v[1], v[2]를 더하고 3으로 나누어 전체 평균 점수를 얻습니다. 관련 추천: ""
C English Zhang Tao
75 92 Wang Zhenghua
65 71 이자오쿳안
87 90 저우 멍젠
77 85
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
C 언어 비디오 튜토리얼

위 내용은 C 언어에서 2차원 배열이 메모리에 저장되는 순서는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.