본문 바로가기

Algorithm/C프로그래밍

[C언어] 배열과 포인터의 관계, 차이점

반응형

* 출처: 코딩도장 36.8 배열을 포인터에 넣기

* 출처: 최유경 교수님 C 프로그래밍 포인터 수업자료

 

■ 배열 이름의 비밀

배열 이름은 배열의 0번 원소의 시작 주소를 의미한다.

※ &ar은 전체 배열의 시작 주소. (값은 같지만, 다른 자료형이다.)

 

출처: 최유경 교수님 강의 자료

□ 주소를 이용한 배열 참조

- 배열 이름은 주소를 의미하므로, 참조 연산자와 함께 사용할 수 있다.

출처: 최유경 교수님 강의 자료


■ 배열 주소에 대한 증감 연산

- 배열 원소 하나의 크기만큼 증감 (int 배열의 경우: 4)

- ar+i : 배열 ar의 i번째 원소의 주소

- *(ar+i) : 배열 ar의 i번째 원소의 값. 즉 ar[i]

출처: 최유경 교수님 강의 자료

 


■ 배열을 포인터 변수에 연결하여 사용하기

- 배열 이름은 주소를 의미하므로, 포인터 변수에 대입할 수 있다.

- 배열의 0번째 원소의 주소 ar에 i(번째)를 더한 ar+i를 인자로 입력한다.

 

※ 포인터 변수에 대한 증감 연산 시, 포인트 변수가 나타내는 자료형의 크기 단위로 증감한다. (ex. 정수형은 4)

출처: 최유경 교수님의 강의 자료

※ 포인터 변수도 배열의 첨자 형태로 값을 참조할 수 있다.

출처: 최유경 교수님의 강의 자료

BUT) 포인터 서식 지정자 (%p) 사용할 때는 배열처럼 인덱스 사용 불가!!


출처: 코딩도장

배열은 그 자체로 주솟값이기 때문에 포인터에 넣을 수 있다.

(배열은 포인터로 선언하지 않아도 그 자체로 포인터 기능을 한다.)

다음과 같이 포인터에 배열을 넣고, 포인터에서 인덱스로 요소에 접근할 수 있다.

(자료형과 차원이 같다면) 배열을 포인터에 바로 할당할 수 있다.

즉, 실제로는 배열도 포인터이다.

 


■ 배열과 포인터의 관계 정리

출처: 최유경 교수님의 강의 자료
출처: 최유경 교수님의 강의 자료


■ 배열 이름과 포인터 변수의 차이점

출처: 최유경 교수님의 강의 자료
출처: 최유경 교수님의 강의 자료

 

※ 배열과 포인터가 다른 점: sizeof로 크기를 계산했을 때

- sizeof(배열): 배열이 차지하는 전체 공간 출력됨

- sizeof(배열의 주소가 들어있는 포인터): 포인터의 크기만 출력됨 (32비트->4, 64비트->8)


■ 배열과 포인터 주의사항

출처: 최유경 교수님의 강의 자료
출처: 최유경 교수님의 강의 자료
출처: 최유경 교수님의 강의 자료

 

반응형