<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/