반응형
2차원 배열이름의 포인터 형

int형과 int* 1차원배열은 이런식으로 포인터 형을 취할 수 있다.

int arr[10];	// int형 포인터 (int*)
int* parr[20];	// int형 이중 포인터 (int**)

int arr1[3][4];

 

 

 

 

2차원 배열 선언

2차원 배열을 포인터형을 취할 때는 약간 다르다.

아래의 코드처럼 데이터타입(*변수명)[행의 길이]; 로 선언이 됩니다.

int (*ptr)[4];

 

아래의 코드에서 포인터형에 +1을 할 경우 데이터타입 * 2차원 배열의 행길이가 증가하는 포인터 변수가 된다.

arr1+1  => char형크기 * 4

arr2+1 => int형크기 * 6

+ 1을 하면 다음 열의 첫번째 행의 주소값이 된다.

char (*arr1)[4];
int (*arr2)[6];

 

 

2차원배열이면서 자료형이 같고 행의 길이가 같으면 포인터 형이 같은것이다.

 

 

 

2차원 배열 주의사항
  • 배열 포인터와 포인터 배열은 다르다!
int * arrA[4];	// 해당 값에 주소가 들어가 있다.
int (*whoB)[4];	// 해당 값에 int형이 들어가 있다.

 

  • 인자로 2차원배열 전달

2차원배열을 매개변수로 넘길때 행의 길이를 넘겨야 합니다.

2차원배열을 매개변수로 넘길때 SimpleFunc1, SimpleFunc2처럼 매개변수를 넘기면 됩니다.

두 함수 모두 동일한 선언입니다.  

int arr1[2][7];
double arr2[10][5];
SimpleFunc1(arr1, arr2);
SimpleFunc2(arr1, arr2);

void SimpleFunc1(int (*parr1)[7], double (*parr2)[5]) {...}
void SimpleFunc2(int  parr1[][7], double parr2[][5]) {...}

 

  • 배열의 세로길이 계산방식

2차원 배열의 행의 길이는 결정되어 있다.

세로 길이 정보는 결정되어 있지 않기에

sizeof(배열) / sizeof(배열[0]) 으로 배열의 세로길이를 구할 수 있다.

 

 

  • 2차원 배열과 포인터 표현 방식

아래의 코드는 모두 동일한 표현 방식입니다.

arr[2][1] = 4;
(*(arr+2))[1] = 4;
*(arr[2] +1) = 4;
*(*(arr+2)+1) = 4;

 

반응형

 

반응형

'C' 카테고리의 다른 글

문자와 문자열 함수  (0) 2023.05.22
함수 포인터  (0) 2023.05.19
다중포인터  (0) 2023.05.18
다차원 배열  (0) 2023.05.17
홀수 짝수 구분  (0) 2023.05.17

+ Recent posts