게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
연산자 우선순위 - 포인터 배열과 배열포인터
게시물ID : programmer_6466짧은주소 복사하기
작성자 : 상사꽃
추천 : 0
조회수 : 1834회
댓글수 : 3개
등록시간 : 2014/11/11 03:53:16
아 미치겠네요. 쫌있다 출근해야되는데 잠이 안와요 ㅜㅠ

심심해서 끄적거려봅니다.
이불속에서 아이패드로 하는거라 오타는 알아서 걸러주세요.

int* a ; // a는 정수형 포인터입니다.
int a[10]. // a는 배열입니다.

int* a[10] // a는 배열입니다. 이 배열엔 10개의 정수형 포인터가 저장됩니다.
a는 포인터이기 전에 배열입니다.
위치상 포인터가 먼저 나왔는데도요.
그 이유는 []연산자가 포인터 * 연산자보다 우선순위가 높기 때문입니다.
포인터의 배열, 포인터 배열이라 말합니다.

int (*a)[10] ;
a는 포인터입니다. 괄호때문에 포인터 * 연산이 우선순위를 잡게 되어 배열이 아니라 포인터가 됩니다.
무엇을 가리키는 포인터일까요?
나머지 부분, int [10].... 정수형이며 갯수가 10인 배열을 가르키는 포인터입니다.

int test[10] ;
int (*a)[10] ;
a = &test ;
요로케 가리키면 됩니다.
배열의 포인터, 배열 포인터라 합니다.

연산자 우선순위는 수학의 그것과 일치하여 힐끗 보고 넘기는 경우가 많은데
자칫 실수를 범할 수 있습니다.

참고로 위 포인터 배열과 배열포인터를 sizeof(*a) 로 찍어보시면 이에껀 4, 밑에껀 4*10=40 이 나올껍니다.

배열포인터에 그냥 정수형 포인터를 넣으면 c++ 은 에러를 뱉어내지만 c는 그냥 warning 만 주절거립니다.

마음속에 새기고 새깁시다.  Warning은 에러입니다.

하, 잠 안온다. ㅜ.ㅠ


전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호