배열은 주소다. 포인터 변수도 주소를 값으로 가진다.

 

배열과 포인터는 맥락상 거의 같다. 하지만 포인터에서는 먹히고 배열에서는 안되는게 몇가지가 있다.

 

이 차이점을 분명히 하면서 포인터에 대한 이해도를 높이자.(포큐아카데미 설명이 정말 자세하다)

 

sizeof

C언어 포큐아카데미

sizeof으로 크기를 알고 싶을때 포인터는 변수 임으로 4바이트(사용하는 bit수에 따라 다름)를 반환값으로 가지지만 배열은 해당 원소의 개수 X 자료형의 크기를 반환한다.

 

 

배열 문자열

C언어 포큐아카데미

배열로 Monday 라는 문자열을 만들게 되면 day1 변수는 스택 메모리에 저장되며 값 또한 실제로 존재한다.

day[0]은 "M" day[1]은 "o" ... 이런식으로 물론 변경도 가능!

 

 

포인터 문자열

C언어 포큐아카데미

포인터로 day2 문자열 변수를 만들게 되면 day2라는 변수는 스택에 저장 되지만 값으로는 "Monday" 문자열의 주소값을 가짐 또한 "Monday" 문자열의 메모리 저장 공간은 데이터 영역임.(값 변경 불가능 ReadOnly)

 

 

포인터, 배열 대입 차이점

배열로 만든 문자열 수정 가능 BUT 포인터로 만든 문자열 수정 불가

 

배열은 상수다! 이말을 기억하면 안되는것들을 판단할때 참 편하다. 위 처럼 포인터변수는 값을 대입할 수 있지만 배열 상수는 불가!

 

 

포인터 변수는 증감을 할 수 있지만 배열 상수는 불가!

 

 

'C' 카테고리의 다른 글

C언어 구조체  (0) 2019.12.18
C언어 포인터 배열  (0) 2019.12.13
C 포인터 const  (0) 2019.12.12
C 스택 메모리 해부(어셈블리어)  (3) 2019.12.09
C언어 Char, int 정리  (0) 2019.12.05

+ Recent posts