c언어 포인터 응용과 함수 포인터

12
C - 함수 포인터와 응용 경성대학교 컴퓨터공학부 1학년 2014858110 정준혁

Upload: jun-jung

Post on 18-Aug-2015

56 views

Category:

Software


5 download

TRANSCRIPT

Page 1: C언어 포인터 응용과 함수 포인터

C - 함수 포인터와 응용경성대학교 컴퓨터공학부 1학년

2014858110 정준혁

Page 2: C언어 포인터 응용과 함수 포인터

auto 와 static 변수• 메모리에는, Data영역, Heap영역, Stack영역

• auto 변수는 Stack 내에 자료를 저장.

• 선언은 auto int a 또는, int a 로 선언.

• static 변수는 Data 내에 자료를 저장.

• 선언은 static int a 로 선언.

• 프로그램 시작시 생성되고 종료시 삭제 됨.

Page 3: C언어 포인터 응용과 함수 포인터

Static과 auto변수 차이 예제

Static 변수 초기화

Auto 변수 초기화

각 변수의 메모리 주소 저장

변수의 존재 확인

Page 4: C언어 포인터 응용과 함수 포인터

static과 auto변수 차이 예제 - 실행결과

같은 메모리주소

• 같은 메모리 주소를 참조하여 값을 읽고 있지만, 결과는 다르다.

• Static 변수는 프로그램이 끝날 때 까지 메모리 상(Data 영역)에 존재하고, Auto 변수(기본 변수)는 스코프 내에서만 존재. (해당 스코프가 끝날 경우 변수는 사라짐)

Page 5: C언어 포인터 응용과 함수 포인터

Call By Address• 함수에서 인자를 포인터로 선언하여, 주소 값을 전달함으로 간접적으로 값을 이용하는 방식.

• ‘&’ 앰퍼샌드 연산자를 이용

• Call By Value는 실 변수의 값을 변환할 수 없음 (값을 대입하는 방식)

• Call By Address는 해당 변수를 서로 공유하는 것 -> 실 변수의 값을 직접 변환할 수 있음.

Age

*pAge 12FF7612

12

Page 6: C언어 포인터 응용과 함수 포인터

Call By Address 예제

main 함수 내의 값을 직접 변조

각 함수에 주소값을 인자로 전달한다

Page 7: C언어 포인터 응용과 함수 포인터

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

• 메모리 주소를 전달하여, 메인 함수 내의 값을 직접 변환할 수 있다.

• 값을 서로 공유하는 것이기 때문에 불필요한 작업을 줄일 수 있다.

Page 8: C언어 포인터 응용과 함수 포인터

여기서 잠깐!

함수의 인자로 첫번째 사람의 주소와 명수, 그리고 금액을 받음

스택의 원리를 살짝 이용해서 반복된 코드를 간단하게 바꿔보자! (배열의 원리)

포인터 연산의 사용

Page 9: C언어 포인터 응용과 함수 포인터

실행결과

• 배열의 원리를 이용한 것. (연속된 자료형을 가진 변수는 연속된 메모리 주소를 가진다)

• 첫번째 변수의 주소 값과 변수의 개수를 넘겨주는 이유는 오버플로우를 방지하기 위한 것.

Page 10: C언어 포인터 응용과 함수 포인터

함수 포인터• 함수의 메모리 주소를 가진 포인터 변수

• 해당 포인터 변수에 매개변수를 대입함으로써, 간접적으로 함수를 사용할 수 있다.

• 예를 들어, addfunction 함수의 주소를 가진 afp 포인터 변수가 있다고 가정하자.-> *afp(10,10) 과 addfunction(10, 10)은 똑같이 작동한다.

return a + baddfunction

*afp 12FF74

Page 11: C언어 포인터 응용과 함수 포인터

함수 포인터 예제

함수 2개 초기화

간접 함수 호출

함수 포인터 초기화

초기화 된 함수 포인터에 함수 대입

Page 12: C언어 포인터 응용과 함수 포인터

실행결과

• 함수에도 주소가 있다.(함수 역시 기계어 코드가 메모리를 점유한 상태에서 작동 되는 것이기에)

• 간접 호출과 직접호출은 사실상 똑같이 작동한다.