2차원 배열의 사용

2차원 배열은 1차원 배열이 중첩되었다는 의미로 [](대괄호)를 두 번 연속하여 씁니다

자료형 배열이름 [행][열] = { {값,값,값,....}, {값,값,값,....} };

ex)int a[10][10];

 

2차원 배열 또한 기본적으로 0 인덱스부터 시작합니다

 

 

2차원 배열과  for 문을 활용한 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int a[3][3= { {1,2,3},{4,5,6,},{7,8,9,} };
 
int main(void) {
    int i, j;
    for (i = 0;i < 3; i++) {
        for (j = 0; j < 3; j++) {
            printf("%d", a[i][j]);
        }
        printf("\n");
    }
    system("pause");
    return 0;
}
 
cs

 

2차원 배열을 활용해 5명의 학생의 수학,영어 점수를 합하는 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
int main(void) {
    int score[5][2];
    int total[2] = { 0, };
    int i;
 
    for (i = 0; i < 5; i++) {
        printf("%d번 학생의 수학,영어 점수 :", i + 1);
        scanf("%d %d", &score[i][0], &score[i][1]);
    }
    for (i = 0; i < 5; i++) {
        total[0] += score[i][0];
        total[1] += score[i][1];
    }
    printf("\n\n5명의 수학 점수 합계 : %d\n", total[0]);
    printf("5명의 영어 점수 합계 : %d\n", total[1]);
    return 0;
}
cs

다차원 배열

2차원 배열 이상의 다차원 배열 또한 사용할 수 있으나

컴퓨터는 기본적으로 화면에 2차원 형태만 출력할 수 있습니다

 

 

 

3차원 배열의 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int a[2][3][3= { { {1,2,3},{4,5,6},{7,8,9} },
                   { {1,2,3},{4,5,6},{7,8,9} } };
 
int main(void) {
    int i, j, k;
    for (i = 0;i < 2;i++) {
        for (j = 0;j < 3; j++) {
            for (k = 0;k < 3; k++) {
                printf("%d ", a[i][j][k]);
            }
            printf("\n");
        }
        printf("\n");
    }
    system("pause");
    return 0;
}
 
cs

 

 

포인터 배열의 구조 분석

배열은 포인터와 거의 동일한 방식으로 동작합니다

배열의 이름은 배열의 원소의 첫 번째 주소가 됩니다

유일한 차이점이라고 하면, 포인터변수이며 배열의 이름은 상수입니다.

 

 

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main(void)
{
    int a = 10;
    int b[10];
    b = &a;
    system("pause");
    return 0;
}
cs

위와 같이 입력하게 되면 "식이 수정할 수 있는 lvalue여야 합니다."라는 오류메세지가 나옵니다

이는 상수에 어떠한 데이터를 넣으려고 하기 때문입니다

반대로 포인터를 배열처럼 사용할 수 있습니다

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main(void)
{
    int a[5= { 1,2,3,4,5 };
    int* b = a;
    printf("%d\n", b[2]);
    system("pause");
    return 0;
}
cs

위와 같이 입력하게 되면 성공적으로 작동하게 됩니다

 

 

 

 

포인터 배열의 연산 예시

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(void)
{
    int a[5= { 1,2,3,4,5 };
    int *= a;
    printf("%d\n"*(p++));
    printf("%d\n"*(++p));
    printf("%d\n"*(p + 2));
    system("pause");
    return 0;
}
cs

 

 

이중포인터를 이용해서 2차원 배열의 포인터 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main(void)
{
    int a[2][5= { {1,2,3,4,5},{6,7,8,9,10} };
    int(*p)[5= a[1];
    int i;
    for (i = 0; i < 5; i++) {
        printf("%d", p[0][i]);
    }
    system("pause");
    return 0;
}
cs

 

 

 

 C언어의 배열은 내부적으로 포인터와 동일하므로 포인터 연산으로 배열을 대체 할수 있습니다.

'C' 카테고리의 다른 글

함수 포인터  (0) 2021.02.13
동적 메모리 할당  (0) 2021.02.10
C언어에서 변수를 처리하는 방법  (0) 2021.02.10
문자열  (0) 2021.02.08
문자 : 아스키 코드(Ascii Code) , 버퍼(Buffer)  (0) 2021.02.08

+ Recent posts