노는게 제일 좋습니다.

14회차 : 첨자 연산, 포인터 배열 본문

C

14회차 : 첨자 연산, 포인터 배열

노는게 제일 좋습니다. 2017. 2. 23. 05:03

참고자료 http://soen.kr/


그 어느때보다 혼돈의 카오스가 가득한 공부였다...

주변에 실력자들이 많아서 감사하게도 편하게 공부한다.


1. 부분배열(subArray)

int a[2][5]; 라고 한다면 보통 다차원 배열이라고 부르지만 c에는 다차원배열이 존재하지 않고 오직 일차원배열만이 존재한다.

즉, a[2][5]배열은 이차원배열이 아니며 a[0], a[1] 이라는 부분배열을 가진다. a[0]는 그저 a의 원소가 아니라, 하나의 완전한 배열인 것이다.

a[0]이라는 배열은 a[0][0]~a[0][4]라는 원소를 가질 것이다.


2. 포인터 배열

원소가 포인터형인 배열.

예 : char *a[5]={"java","python","perl","ruby","cpp"};

만약 위와같이 정의를 해두면, "java"가 메모리공간 어딘가에 저장되고, 그 포인터가 반환돼서 a[0]으로 쏙 들어간다.

printf("%s",a[0])을 하면 그래서 "java"가 출력된다.

%s는 문자열의 포인터를 받아 문자열을 출력한다.


3. 배열과 포인터의 차이

- 배열은 상수, 포인터는 변수. 가리키는 대상이 바뀔 수 있는지 여부가 다르다.

- 배열 원소에 접근할 때는 배열 포인터에서부터 인덱스만큼 이동해 읽지만, 포인터는 대상체로 직접 이동한다. 접근속도는 포인터가 배열보다 빠르다.

Comments