포인터..
어려운거 하나도 없다!
Pointer 란?
말 그대로 무엇인가를 가리킨다.
Pointer를 정의 해줄 때 C언어에서는
Type 과 변수명을 선언하는 그 사이에 '*'를 적어줌으로서
ex)
int* a;
a는 가리킨다. 무엇을? int형 타입의 변수를 가리킨다.
즉 자신보다 *개수가 하나 적은 타입을 가리킨다고 생각하자.
다시말해
int* a 는 int* 보다 *개수가 하나 적은 int형을 가리키게 되는것이다.
뭐 더블포인터.. 이런게 많은데 다 똑같다
int** a;
a는 가리킨다. 무엇을? 자신의 타입인
int** 형보다 *가 한개가 적은
즉 int*형을 가리키게 되는것이다.
자 그럼 하나더해서
char*** c;
c는 가리킨단다. 무엇을? 자신의 타입인
char***형보다 *가 한개 적은
char**형을 가리키게 되는것이다.
평소 변수를 생성할 때
Type 변수명;
위와 같이 정의를 해주는데 이때 읽는 법으로는
변수명의 오른쪽을 먼저 확인한다.(함수포인터 같은 경우 때문 [함수 포인터는 아래에서 설명])
-------------------------------------------------
int** a;
a의 오른쪽에 무엇이 있는가?
a;
';' 세미콜론이 있다. 즉 a의 오른쪽에는 아무것도 없는 것이므로 그냥 변수다. 어떤변수?
이제 왼쪽을 확인한다.
int** a
'*' 포인터가 있다.
이것을 만나면서 이제 a는 무엇인가를 가리키는 포인터가 된거다.
하지만 포인터는 무엇인가를 가리키는 것이므로 무엇?
그 바로 왼쪽들을 확인한다
int** a
'int*' 즉 a는 (int*)라는 타입을 가진것을 가리키는 포인터다
정말 하나도 어려운게 없다.. ㅠ
------------------------------------------------
이번엔 위에서 말한 함수포인터도 보여주겠다.
아까 말한것과 같이 오른쪾을 확인한다.
int (*a)(int , int );
')' 를 만나면서 아까 ';'를 만난 것처럼 왼쪽으로 간다.
int (*a)(int , int );
'*' 가리킨다. 무엇을?
괄호를 빠져나간뒤 다시 오른쪽을 확인한다.
int (*a)(int , int );
그렇다 a는 매개변수를 (int , int ) 로 갖는 함수를 가리킨다. 그뒤 ';'를 만나면서 왼쪽을 확인
int (*a)(int , int );
int를 만나면서 a는 (int, int)를 매개변수로 갖고있으며 int형을 반환하는 함수를 가리키는 포인터다.
------------------------------------------------
이번엔 배열로 확인을 해보겠다. 조금 햇갈리는 사람들이 많더라.. 저도 설명하면서 틀렸다면
댓글로 부탁드립니다 ㅠ
int (*a)[5]; 라는게 있고
int (*a[5]); 라는게 있다
이번엔 상세히 적기엔 너무 길어지므로 간단하게 적어보겠다.
먼저
int (*a)[5];
a의 오른쪽 ')' 바로 왼쪽 확인.
'*' 그렇다 a는 가리킨단다.
무엇을?
() 탈출
오른쪽 확인 '[5]'
a는 5칸짜리 배열을 가리킨단다.
그 배열의 타입은?
왼쪽확인
'int'
그렇다 a는 int형들을 5칸으로 나열해둔 배열을 가리키는 포인터다.
-------------------------------------------------
int (*a[5]); = int* a[5];
a의 오른쪽 '[5]' 확인.
a는 [5]칸의 배열이다. 어떤 타입들로 채워진?
그 뒤 다시 오른쪽 확인 ')'
그러고 왼쪽 확인 '*'
a라는 5칸짜리 배열은 포인터로 채워져 있다.
그런데 포인터는 무엇인가를 가리킨다. 무엇을?
() 탈출후 오른쪽 확인
; 세미콜론이 있다. 그러면 다시 왼쪽을 확인하자.
'int'
그렇다 a는 int을 가리키는 포인터들로 채워진 5칸짜리 배열이다.
오른쪽 int* a[5] 역시
우측 [5] 좌측 '*' 좌측 int
거의 대부분의 변수들을 읽을때 우측으로 ')' 또는 ';' 를 만날 때 까지 읽은 후
끝 또는 '('를 만날때 까지 좌측으로 읽으면 모든게 쉽게 읽어진다
------------------------------------------------
나중에 POINTER 관련해서는 한번더 글을 올려보겠습니다!
'Dev > [C]' 카테고리의 다른 글
[개탱][C][지역변수와 전역변수] (0) | 2018.01.02 |
---|---|
[개탱][C][전처리(preprocessor directives)][헤더파일 중복선언 방지] (0) | 2018.01.02 |
[개탱][C][분리 컴파일[Separate compilation]] (0) | 2018.01.02 |
[개탱][C][typedef][Typedef Struct ][사용자 정의 구조체] (0) | 2018.01.02 |
[개탱][C][구조체] (0) | 2018.01.02 |