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 *p = 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 |