c 포인터와 배열의 기초

16
C - 포인터 그리고 배열 포인터의 기초 경성대학교 컴퓨터공학부 1학년 2014858110 정준혁

Upload: jun-jung

Post on 18-Aug-2015

15 views

Category:

Software


3 download

TRANSCRIPT

C - 포인터 그리고 배열 포인터의 기초경성대학교 컴퓨터공학부 1학년

2014858110 정준혁

목차

• 메모리와 주소

• 포인터의 선언 및 다차원 포인터

• 다차원 포인터

• 포인터 배열

• 포인터 다차원 배열

메모리와 주소• 메모리는 하나의 아파트

• 아파트에 동/호수가 있듯, 메모리에도 주소가 있음

• 메모리의 각 위치는 유일한 주소로 식별

• 각 위치에는 어떠한 값이 존재

• 수 많은 주소를 기억하는 것은 힘든 일-> 주소 대신 이름을 사용 = 변수

• 변수와 메모리 주소의 관계는 컴파일러가 제공

• 하드웨어는 항상 메모리 주소로 접근(변수 사용X)

A동 B동

501호

4502호 4502호

501호

포인터 변수• 포인터 변수란?

• 특정 주소를 포인팅하는 변수

• 메모리의 주소를 저장하고 있는 변수

• 변수명 앞에 * 를 붙이거나, 자료형 뒤 *를 붙여서 선언

• 선호되는 방식은 자료형 뒤 * 를 붙이는 것

2014Year

*pYear 12FF76

포인터 변수 예제

포인터 변수의 초기화

포인터 변수에 Year 변수의 메모리 주소 대입

포인터 변수 예제 - 실행결과

같다

• 포인터 변수는 가리키는 변수의 시작 주소를 가지고 있다.

• 포인터 변수도 하나의 변수로, 메모리 주소를 가진다.

여기서 잠시!

Year 변수는 int, 포인터 Year 변수는 char로 선언

int형 변수의 주소를 char형 포인터 변수에 대입

만약, 포인터 변수의 자료형과, 포인터 변수가 가리키는 변수의 자료형이 다르다면?

실행결과

주소는 같지만…

• 포인터 변수는 변수 내 저장된 메모리의 시작 주소에서 포인터 변수의 자료형 만큼 읽어온다.

• 즉, Year 변수 자체를 가리키고 있는 것이 아니고, Year 변수가 가지는 메모리 시작 주소를 가리키는 것!

값은 다르다.

다차원 포인터 변수• 다차원 포인터 변수란?

• 특정 주소를 포인팅하는 변수를 포인팅 하는 변수

• 메모리의 주소를 저장하고 있는 변수의 주소를 저장한 변수

• 변수명 앞에 * 를 붙이거나, 자료형 뒤 *를 붙여서 선언

• * 의 개수로 차원을 결정

2014Year

*pYear 12FF74

12FF78**ppYear

***pppYear 12FF7C

다차원 포인터 예제

다차원 포인터 변수의 초기화

각각 포인터 변수에 주소 대입

다차원 포인터 예제 - 실행결과

• 포인터의 차원에는 거의 제한이 없다. (하지만 3차원 이내로 사용하는 것을 권장)

• 같은 자료형이라면 연속된 주소가 구성된다.

배열 포인터 변수• 배열을 가리키는 포인터 변수

• 배열 변수에는 해당 배열의 시작주소를 가지고 있음.

• 따라서 포인터 배열 초기화시 따로 & 연산자를 넣지 않아도 됨

88score[4]

*pScore

92

89

78

12FF74

배열 포인터 예제

배열 포인터 예제 - 실행결과

다차원 배열 포인터 예제

배열 포인터 예제 - 실행결과

• 다차원 배열도 포인터 배열을 이용하면 1차원 배열처럼 이용가능

• 다차원 포인터의 순서는 행 -> 열 순으로 배열됨.