SlideShare a Scribd company logo
1 of 10
Download to read offline
Pointer & Functions
2
Call-by-Value
§ Call-by-Value
– 함수 호출시 argument의 값(value)이 parameter 로 넘어가는
형식으로 함수가 호출되는 것
– 값만 copy되므로, function안에서 변경된 parameter의 값은
유지되지 않는다.
void function(int) ;
int main(void) {
int a=1;
function(a);
printf(“after function call : %dn”, a);
return 0;
}
void function(int a) {
a = a + 1 ;
return ;
}
3
Call-by-Value
1 1
main 의 a
function 의 a
main() function function() function
a = a + 1 ;
function(a); 가 호출될 때
main의 a가 가진 값이
function의 a로 복사된다.
2
Return 후
1 main의 a와 function의 a는 서로 다른 변
수이기 때문에, function의 a를 수정하여
도 main의 a의 값은 변화하지 않는다.
1
4
Call-by-Reference
§ Call-by-Reference
– argument의 값이 아닌, argument의 주소를 함수에 넘기는
방식으로 함수를 호출하는 방식
– 주소를 통하여 원래 변수의 값을 함수 내에서 변경 가능
§ Call-by-Reference 구현 (using pointer)
– 주소를 값으로 하는 pointer를 이용한다.
– Function Parameter를 pointer로 선언한다.
– Function Body에서 indirect operator(*)를 사용한다.
– Function Call 할 때 address를 argument로 한다.
5
Call-by-Reference
[Ex]
void func1(int *pa) ;
int main(void) {
int a=1;
func1(&a);
printf(“after function call : %dn”, a);
return 0;
}
void func1(int *pa) {
*pa = *pa + 1 ;
return ;
}
6
Call-by-Reference
1 1000
main 의 a
function 의 pa
main() function function() function
*pa = *pa + 1 ;
function() 가 호출될 때
main의 a의 주소값이
function의 pa로 복사된다.
1000
Return 후
2
function의 pa에 main a의 주소가 있기 때
문에, *pa는 main의 a를 의미하고, 따라서
*pa = *pa + 1 ; 하면 main의 a 값이 변화하
게 된다.
1000
2
§ Swap Function
7
Call-by-Reference
[Ex]
void swap(int i, int j) {
int temp = i ;
i = j;
j = temp;
}
int main(void) {
int a=3, b=7;
printf(“before swap : %d %dn”, a, b);
swap( a, b );
printf(“after swap : %d %dn”, a, b);
return 0;
}
a, b 두 변수의 값이 바뀔까?
§ Swap Function
8
Call-by-Reference
[Ex]
void swap(int *p, int *q) {
int temp = *p ;
*p = *q;
*q = temp;
}
int main(void) {
int a=3, b=7;
printf(“before swap : %d %dn”, a, b);
swap(&a, &b);
printf(“after swap : %d %dn”, a, b);
return 0;
}
before swap : 3 7
after swap : 7 3
Call-by-Reference
§ 두 포인터 변수의 값을 swap하고 싶다.
9
[Ex]
void swap( ??, ?? ) {
??
}
int main(void) {
int a=3, b=7;
int *p = &a, *q = &b ;
printf(“before swap : %d %dn”, *p, *q);
swap( ??, ??);
printf(“after swap : %d %dn”, *p, *q);
return 0;
}
before swap : 3 7
after swap : 7 3
§ 두 포인터 변수의 값을 swap하고 싶다.
10
Call-by-Reference
[Ex]
void swap(int **pp, int **qq) {
int *temp = *pp ;
*pp = *qq;
*qq = temp;
}
int main(void) {
int a=3, b=7;
int *p = &a, *q = &b ;
printf(“before swap : %d %dn”, *p, *q);
swap(&p, &q);
printf(“after swap : %d %dn”, *p, *q);
return 0;
}
before swap : 3 7
after swap : 7 3

More Related Content

What's hot

7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장HyeonSeok Choi
 
Java8 & Lambda
Java8 & LambdaJava8 & Lambda
Java8 & Lambda기현 황
 
13th chapter12 slide
13th chapter12 slide13th chapter12 slide
13th chapter12 slide웅식 전
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개beom kyun choi
 
Finding Functional Programming
Finding Functional Programming Finding Functional Programming
Finding Functional Programming NAVER Engineering
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가Vong Sik Kong
 
7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍Hyunsoo Jung
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Circulus
 
씹고 뜯고 맛보고 즐기는 스트림 API
씹고 뜯고 맛보고 즐기는 스트림 API씹고 뜯고 맛보고 즐기는 스트림 API
씹고 뜯고 맛보고 즐기는 스트림 APIArawn Park
 
Refactoring - Chapter 8.2
Refactoring - Chapter 8.2Refactoring - Chapter 8.2
Refactoring - Chapter 8.2Ji Ung Lee
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
 
Modern effective c++ 항목 3
Modern effective c++ 항목 3Modern effective c++ 항목 3
Modern effective c++ 항목 3ssuser7c5a40
 
자바8강의 2강. Stream API
자바8강의 2강. Stream API자바8강의 2강. Stream API
자바8강의 2강. Stream APISejong Park
 

What's hot (20)

Java8 람다
Java8 람다Java8 람다
Java8 람다
 
튜터링 #9 20120409
튜터링 #9 20120409튜터링 #9 20120409
튜터링 #9 20120409
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
 
Java8 & Lambda
Java8 & LambdaJava8 & Lambda
Java8 & Lambda
 
13th chapter12 slide
13th chapter12 slide13th chapter12 slide
13th chapter12 slide
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
Finding Functional Programming
Finding Functional Programming Finding Functional Programming
Finding Functional Programming
 
W14 chap13
W14 chap13W14 chap13
W14 chap13
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
 
7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체
 
씹고 뜯고 맛보고 즐기는 스트림 API
씹고 뜯고 맛보고 즐기는 스트림 API씹고 뜯고 맛보고 즐기는 스트림 API
씹고 뜯고 맛보고 즐기는 스트림 API
 
8 swift 중첩함수
8 swift 중첩함수8 swift 중첩함수
8 swift 중첩함수
 
Refactoring - Chapter 8.2
Refactoring - Chapter 8.2Refactoring - Chapter 8.2
Refactoring - Chapter 8.2
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
 
C++11 1
C++11 1C++11 1
C++11 1
 
Modern effective c++ 항목 3
Modern effective c++ 항목 3Modern effective c++ 항목 3
Modern effective c++ 항목 3
 
자바8강의 2강. Stream API
자바8강의 2강. Stream API자바8강의 2강. Stream API
자바8강의 2강. Stream API
 
자바스크립트 클래스의 프로토타입(prototype of class)
자바스크립트 클래스의  프로토타입(prototype of class)자바스크립트 클래스의  프로토타입(prototype of class)
자바스크립트 클래스의 프로토타입(prototype of class)
 

Similar to 10. pointer & function

Lua 문법 -함수
Lua 문법 -함수Lua 문법 -함수
Lua 문법 -함수Jaehoon Lee
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 
Reverse Engineering 2015.02.09
Reverse Engineering 2015.02.09Reverse Engineering 2015.02.09
Reverse Engineering 2015.02.09fromitive
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)유석 남
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)유익아카데미
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229Yong Joon Moon
 
C언어 세미나 - 함수
C언어 세미나 - 함수C언어 세미나 - 함수
C언어 세미나 - 함수SeungHyun Lee
 

Similar to 10. pointer & function (9)

06장 함수
06장 함수06장 함수
06장 함수
 
Lua 문법 -함수
Lua 문법 -함수Lua 문법 -함수
Lua 문법 -함수
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
6 function
6 function6 function
6 function
 
Reverse Engineering 2015.02.09
Reverse Engineering 2015.02.09Reverse Engineering 2015.02.09
Reverse Engineering 2015.02.09
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
 
C언어 세미나 - 함수
C언어 세미나 - 함수C언어 세미나 - 함수
C언어 세미나 - 함수
 

More from 웅식 전

15 3. modulization
15 3. modulization15 3. modulization
15 3. modulization웅식 전
 
15 2. arguement passing to main
15 2. arguement passing to main15 2. arguement passing to main
15 2. arguement passing to main웅식 전
 
12 2. dynamic allocation
12 2. dynamic allocation12 2. dynamic allocation
12 2. dynamic allocation웅식 전
 
12 1. multi-dimensional array
12 1. multi-dimensional array12 1. multi-dimensional array
12 1. multi-dimensional array웅식 전
 
11. array & pointer
11. array & pointer11. array & pointer
11. array & pointer웅식 전
 
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class7. variable scope rule,-storage_class
7. variable scope rule,-storage_class웅식 전
 
5 2. string processing
5 2. string processing5 2. string processing
5 2. string processing웅식 전
 
5 1. character processing
5 1. character processing5 1. character processing
5 1. character processing웅식 전
 
15 1. enumeration, typedef
15 1. enumeration, typedef15 1. enumeration, typedef
15 1. enumeration, typedef웅식 전
 
3 2. if statement
3 2. if statement3 2. if statement
3 2. if statement웅식 전
 
3 1. preprocessor, math, stdlib
3 1. preprocessor, math, stdlib3 1. preprocessor, math, stdlib
3 1. preprocessor, math, stdlib웅식 전
 
2 3. standard io
2 3. standard io2 3. standard io
2 3. standard io웅식 전
 
2 2. operators
2 2. operators2 2. operators
2 2. operators웅식 전
 
2 1. variables & data types
2 1. variables & data types2 1. variables & data types
2 1. variables & data types웅식 전
 
Goorm ide 교육용버전 for skku(학생)
Goorm ide 교육용버전 for skku(학생)Goorm ide 교육용버전 for skku(학생)
Goorm ide 교육용버전 for skku(학생)웅식 전
 

More from 웅식 전 (20)

15 3. modulization
15 3. modulization15 3. modulization
15 3. modulization
 
15 2. arguement passing to main
15 2. arguement passing to main15 2. arguement passing to main
15 2. arguement passing to main
 
14. fiile io
14. fiile io14. fiile io
14. fiile io
 
13. structure
13. structure13. structure
13. structure
 
12 2. dynamic allocation
12 2. dynamic allocation12 2. dynamic allocation
12 2. dynamic allocation
 
12 1. multi-dimensional array
12 1. multi-dimensional array12 1. multi-dimensional array
12 1. multi-dimensional array
 
11. array & pointer
11. array & pointer11. array & pointer
11. array & pointer
 
9. pointer
9. pointer9. pointer
9. pointer
 
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class7. variable scope rule,-storage_class
7. variable scope rule,-storage_class
 
6. function
6. function6. function
6. function
 
5 2. string processing
5 2. string processing5 2. string processing
5 2. string processing
 
5 1. character processing
5 1. character processing5 1. character processing
5 1. character processing
 
15 1. enumeration, typedef
15 1. enumeration, typedef15 1. enumeration, typedef
15 1. enumeration, typedef
 
4. loop
4. loop4. loop
4. loop
 
3 2. if statement
3 2. if statement3 2. if statement
3 2. if statement
 
3 1. preprocessor, math, stdlib
3 1. preprocessor, math, stdlib3 1. preprocessor, math, stdlib
3 1. preprocessor, math, stdlib
 
2 3. standard io
2 3. standard io2 3. standard io
2 3. standard io
 
2 2. operators
2 2. operators2 2. operators
2 2. operators
 
2 1. variables & data types
2 1. variables & data types2 1. variables & data types
2 1. variables & data types
 
Goorm ide 교육용버전 for skku(학생)
Goorm ide 교육용버전 for skku(학생)Goorm ide 교육용버전 for skku(학생)
Goorm ide 교육용버전 for skku(학생)
 

10. pointer & function

  • 2. 2 Call-by-Value § Call-by-Value – 함수 호출시 argument의 값(value)이 parameter 로 넘어가는 형식으로 함수가 호출되는 것 – 값만 copy되므로, function안에서 변경된 parameter의 값은 유지되지 않는다. void function(int) ; int main(void) { int a=1; function(a); printf(“after function call : %dn”, a); return 0; } void function(int a) { a = a + 1 ; return ; }
  • 3. 3 Call-by-Value 1 1 main 의 a function 의 a main() function function() function a = a + 1 ; function(a); 가 호출될 때 main의 a가 가진 값이 function의 a로 복사된다. 2 Return 후 1 main의 a와 function의 a는 서로 다른 변 수이기 때문에, function의 a를 수정하여 도 main의 a의 값은 변화하지 않는다. 1
  • 4. 4 Call-by-Reference § Call-by-Reference – argument의 값이 아닌, argument의 주소를 함수에 넘기는 방식으로 함수를 호출하는 방식 – 주소를 통하여 원래 변수의 값을 함수 내에서 변경 가능 § Call-by-Reference 구현 (using pointer) – 주소를 값으로 하는 pointer를 이용한다. – Function Parameter를 pointer로 선언한다. – Function Body에서 indirect operator(*)를 사용한다. – Function Call 할 때 address를 argument로 한다.
  • 5. 5 Call-by-Reference [Ex] void func1(int *pa) ; int main(void) { int a=1; func1(&a); printf(“after function call : %dn”, a); return 0; } void func1(int *pa) { *pa = *pa + 1 ; return ; }
  • 6. 6 Call-by-Reference 1 1000 main 의 a function 의 pa main() function function() function *pa = *pa + 1 ; function() 가 호출될 때 main의 a의 주소값이 function의 pa로 복사된다. 1000 Return 후 2 function의 pa에 main a의 주소가 있기 때 문에, *pa는 main의 a를 의미하고, 따라서 *pa = *pa + 1 ; 하면 main의 a 값이 변화하 게 된다. 1000 2
  • 7. § Swap Function 7 Call-by-Reference [Ex] void swap(int i, int j) { int temp = i ; i = j; j = temp; } int main(void) { int a=3, b=7; printf(“before swap : %d %dn”, a, b); swap( a, b ); printf(“after swap : %d %dn”, a, b); return 0; } a, b 두 변수의 값이 바뀔까?
  • 8. § Swap Function 8 Call-by-Reference [Ex] void swap(int *p, int *q) { int temp = *p ; *p = *q; *q = temp; } int main(void) { int a=3, b=7; printf(“before swap : %d %dn”, a, b); swap(&a, &b); printf(“after swap : %d %dn”, a, b); return 0; } before swap : 3 7 after swap : 7 3
  • 9. Call-by-Reference § 두 포인터 변수의 값을 swap하고 싶다. 9 [Ex] void swap( ??, ?? ) { ?? } int main(void) { int a=3, b=7; int *p = &a, *q = &b ; printf(“before swap : %d %dn”, *p, *q); swap( ??, ??); printf(“after swap : %d %dn”, *p, *q); return 0; } before swap : 3 7 after swap : 7 3
  • 10. § 두 포인터 변수의 값을 swap하고 싶다. 10 Call-by-Reference [Ex] void swap(int **pp, int **qq) { int *temp = *pp ; *pp = *qq; *qq = temp; } int main(void) { int a=3, b=7; int *p = &a, *q = &b ; printf(“before swap : %d %dn”, *p, *q); swap(&p, &q); printf(“after swap : %d %dn”, *p, *q); return 0; } before swap : 3 7 after swap : 7 3