<code example>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> void func(char(*)[256]); int main() { char* arr[4] = { "a", "b", "c", "d" }; char** pArr = arr; // &arr == int(*)[25] // arr == int* char arr2[4][256] = { "A", "B", "C", "D" }; char(*pArr2)[256] = arr2; printf("%c %c \n", arr[0][0], pArr[0][0]); printf("%c %c \n", arr2[0][0], pArr2[0][0]); func(pArr2); } void func(char(*)[256]) {} | cs |
2D 배열 포인터 선언 및
파라미터에서 2D 배열포인터 사용법의 예제코드이다
<2D 배열 포인터에 대해서 포스팅하는 이유>
배열은 포인터로, 포인터배열은 더블포인터와 같다
그런데 간혹 포인터배열과 2차원 배열이 혼동될 때가 있다
그래서 그 차이를 명확히 하여 메모하기 위해 이 글을 작성한다
2D 배열 포인터를 굳이 써야할 상황이 있나? 있다
지역변수로 2차원 배열을 선언하는 것은 쉽다
그러나 malloc으로 메모리를 할당받았을 때 일반적으로는 포인터에 할당받고 [i*width+j] 형식으로 [i][j]를 대신하여 사용한다 (1차원 배열은 문제없다)
이것은 귀찮고 실수가 발생할 여지가 비교적 많다
이때 2D 배열 포인터로 할당받음으로써 [i][j] 형식으로 인덱싱 할수있는 것이다
코드는 간단해지며 실수가 줄어들 것이다
이렇게 2가지 이유에서 2D 배열 포인터에 대하여 글을 작성하게 되었다
'Language' 카테고리의 다른 글
[C언어] library(.so file) compile/build (0) | 2018.01.01 |
---|---|
[C/C++] gcc option (추천 옵션) (0) | 2017.12.18 |
[OOP] private 키워드의 필요성 (0) | 2017.12.15 |
[OOP] [Design Pattern] State Pattern (0) | 2017.12.11 |
cmake 변수 설정방법 (0) | 2017.12.07 |
WRITTEN BY
- hojongs
블로그 옮겼습니다 https://hojongs.github.io/