반응형
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;
반응형
반응형