나같은 늅늅이 춉춉이들을 위한 꾸울팁
포인터와 배열이 섞여서 나오면 첨해 햇갈리곤한다
후로구래밍 고오수라면 얼탱이가없어질수있으니 뒤로가기를 누른다.
가령
int arr[3][3]; : int형 배열의 배열
int **ptr; : int형을 가리키는포인터를 가리키는 포인터
int* ptr[10]; : int형을 가리키는 포인터 10개짜리 배열
int (*ptr)[10]; : int형 10개짜리 배열을 가리키는 포인터
int *ptr[5][6]; : int형을 가리키는 포인터들의 5x6배열
int (*ptr)[2][3]; : int형 2x3배열을 가리키는 포인터
int (*ptr[4])[5]; : int형 5개짜리 배열을 가리키는 포인터 4개짜리 배열
늅늅이들은 복잡해서 눈이 돌아간당
햇갈리기도하고 이게모야!
조오올라 복잡해보이지만 쉽게 읽는 규칙이 있땅
1. 우선순위
[] = () > *
가령 int *ptr[10];의 경우엔 []을먼저읽어서 10개가있다! 뭐가? int* ptr이!
즉 int* 가 10개있는 배열이란것이당!!
2. [],()는 왼쪽, 오른쪽 결합한당
int arr[3][4];
int / [3] / [4] 잖아? 가운데 [3]기준으로 왼쪽오른쪽결합하면
int가(왼) / 4개짜리인배열이(오) / 3개있는 배열
[ㅁㅁㅁㅁ] / [ㅁㅁㅁㅁ] / [ㅁㅁㅁㅁ] 인 배열이란것!
3. [],()는 우선순위가같고 *가나오면 결합한다.
int (*ptr)[10];
*하고 ()하고 결합해서 int *가 10개있는 배열인것
int *arr[2][3];이면
int*가(왼) / 3개짜리인배열이(오) / 2개있는배열
[ * * * ] / [ * * * ]
int (*arr)[2][3]; 이면
int가(왼) / 3개있는배열 / 가2개있는배열 / 을 가르키는 "포인터"
이규칙은 함수포인터에서도 똑같이 읽을 수 있당
char* temp(); char*를 리턴하는 함수
char (*temp)(); cahr를 리턴하는 함수를 가리키는 포인터(함수포인터)
char (*temp[3])(); char를 리턴하는 함수를 가리키는 포인터가 3개있는 배열
규칙이랍시고 줄줄써놨지만
걍 왼쪽읽고 오른쪽읽고 괄호안에 들어가면 포인터로 묶어서결합해서 읽고
이정도면 깨끗하게 쉽게 햇갈리지않고 읽기 좋다.
매우 도움이 되었습니다. 이런 식으로 조금씩 알아두면 전 좋읍니다.