같은 늅늅이 춉춉이들을 위한 꾸울팁

포인터와 배열이 섞여서 나오면 첨해 햇갈리곤한다

후로구래밍 고오수라면 얼탱이가없어질수있으니 뒤로가기를 누른다.



가령

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개있는 배열



규칙이랍시고 줄줄써놨지만

걍 왼쪽읽고 오른쪽읽고 괄호안에 들어가면 포인터로 묶어서결합해서 읽고

이정도면 깨끗하게 쉽게 햇갈리지않고 읽기 좋다.