c 포인터와 배열의 기초
TRANSCRIPT
메모리와 주소• 메모리는 하나의 아파트
• 아파트에 동/호수가 있듯, 메모리에도 주소가 있음
• 메모리의 각 위치는 유일한 주소로 식별
• 각 위치에는 어떠한 값이 존재
• 수 많은 주소를 기억하는 것은 힘든 일-> 주소 대신 이름을 사용 = 변수
• 변수와 메모리 주소의 관계는 컴파일러가 제공
• 하드웨어는 항상 메모리 주소로 접근(변수 사용X)
A동 B동
501호
4502호 4502호
501호
포인터 변수• 포인터 변수란?
• 특정 주소를 포인팅하는 변수
• 메모리의 주소를 저장하고 있는 변수
• 변수명 앞에 * 를 붙이거나, 자료형 뒤 *를 붙여서 선언
• 선호되는 방식은 자료형 뒤 * 를 붙이는 것
2014Year
*pYear 12FF76
여기서 잠시!
Year 변수는 int, 포인터 Year 변수는 char로 선언
int형 변수의 주소를 char형 포인터 변수에 대입
만약, 포인터 변수의 자료형과, 포인터 변수가 가리키는 변수의 자료형이 다르다면?
실행결과
주소는 같지만…
• 포인터 변수는 변수 내 저장된 메모리의 시작 주소에서 포인터 변수의 자료형 만큼 읽어온다.
• 즉, Year 변수 자체를 가리키고 있는 것이 아니고, Year 변수가 가지는 메모리 시작 주소를 가리키는 것!
값은 다르다.
다차원 포인터 변수• 다차원 포인터 변수란?
• 특정 주소를 포인팅하는 변수를 포인팅 하는 변수
• 메모리의 주소를 저장하고 있는 변수의 주소를 저장한 변수
• 변수명 앞에 * 를 붙이거나, 자료형 뒤 *를 붙여서 선언
• * 의 개수로 차원을 결정
2014Year
*pYear 12FF74
12FF78**ppYear
***pppYear 12FF7C
배열 포인터 변수• 배열을 가리키는 포인터 변수
• 배열 변수에는 해당 배열의 시작주소를 가지고 있음.
• 따라서 포인터 배열 초기화시 따로 & 연산자를 넣지 않아도 됨
88score[4]
*pScore
92
89
78
12FF74