-
[C언어] 다차원 배열 그리고 포인터 배열CS & Algorithm & Data Structure & C 2021. 11. 5. 16:33반응형
2차원 배열은 Javascript를 할 때도 헷갈릴 수 있는 부분이다.
그러나 또 굉장히 많이 사용 되므로 잘 알아두어야 한다.
행렬 데이터를 표현 할 때, 그래프 알고리즘을 처리할 때 등 다양한데 우리가 흔히 볼 수 있는 것으로는 표 구조가 2차원 배열과 흡사하여 2차원 배열로 모델링 하기 쉽다고 할 수 있다.
2차원 배열이란?
2차원 배열은 바로 1차원 배열이 중첩되었다는 의미이다. 그래서 대괄호([])를 두번 연속해서 사용하여 표현하게 된다.
이를 표현하자면 아래와 같다.
자료형 배열이름[행][열] = {{값, 값}, {값, 값}} int a[10][10] // 10 x 10
2차원 배열 또한 일반적인 배열처럼 index 번호 0부터 시작하며 주로 2중 for문으로 많이 사용되어진다.
A[0][0] A[0][1] A[0][2] A[1][0] A[1][1] A[1][2] A[2][0] A[2][1] A[2][2] A[3][0] A[3][1] A[3][2] A[4][0] A[4][1] A[4][2] int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int main(void) { for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { printf("%d", a[i][j]); } printf("\n"); } return 0; } //OUTPUT? //123 //456 //789
위의 경우 각 배열을 행이라고 보면 되는데, 첫 번째 행에 1, 2, 3, 두번째 행에 4, 5, 6, 세번째 행에 7, 8, 9가 들어간다고 보면 된다.
중첩된 배열의 경우 이중 for문을 이용해서 나타낼 수 있으며 각 행마다 끊어줌으로써 3x3으로 나타낼 수 있을 것이다.
다차원 배열?
2차원 배열 이상의 경우를 말한다.
컴퓨터는 기본적으로 화면에 2차원 형태만 출력이 가능하며, 내부적으로 다차원 구조로 동작한다고 이해할 수 있을 것이다.
그렇다면 3차원 배열을 나타내보자.
#include <iostream> #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) { for(int i = 0; i < 2; i++) { for(int j = 0; j < 3; j++) { for(int k = 0; k < 3; k++) { printf("%d", a[i][j][k]); } printf("\n"); } printf("\n"); } return 0; } // OUTPUT? //123 //456 //789 //123 //456 //789
이 또한 for문을 이용해서 나타낼 수 있을 것이다.
포인터 배열?
배열은 포인터와 같은 방식으로 동작한다.
즉, 배열의 이름은 배열 원소의 첫 번째 주소가 된다.
이 둘은 내부적으로 거의 동일하게 동작하지만, 차이라고 한다면 포인터는 변수(Variable)이며 배열의 이름은 상수(Constant)이다.
한 예를 보자.
#include <iostream> #include <stdio.h> int main(void) { int a = 10; int b[10]; b = &a; return 0; }
이렇게 출력하면 어떻게 될까?
오류메세지로 "int b[10]가 수정 할 수 있는 value여야한다"고 나온다.
이는 상수를 변경하고자 할 때 볼 수 있는 오류 메세지이다.
반대로 포인터를 배열처럼 사용 할 수는 있다.
만약 배열을 주소값을 바꾸어서 사용하고자 한다면 포인터를 사용해야 할 것이다.
#include <iostream> #include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 5}; int *b = a; printf("%d\n", b[2]); // 3 return 0; }
이렇게 하면 b의 포인터 변수의 값을 성공적으로 바꿀 수 있을 것이다.
또한 포인터는 연산이 가능하기 때문에 주로 사용이 되어진다.
반응형'CS & Algorithm & Data Structure & C' 카테고리의 다른 글
[C언어] 변수를 처리하는 다양한 방식 (소스코드, 전역변수, 지역변수, 동적할당변수, 매개변수) (0) 2021.11.05 컴퓨터 과학과 2진법 (0) 2021.07.12