SlideShare a Scribd company logo
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 (20)

PPTX
Java8 ๋žŒ๋‹ค
Jong Woo Rhee
ย 
PPTX
ํŠœํ„ฐ๋ง #9 20120409
Jong Hyuck Lim
ย 
PDF
7๊ฐ€์ง€ ๋™์‹œ์„ฑ ๋ชจ๋ธ 4์žฅ
HyeonSeok Choi
ย 
PDF
Java8 & Lambda
๊ธฐํ˜„ ํ™ฉ
ย 
PDF
13th chapter12 slide
์›…์‹ ์ „
ย 
PDF
์ž๋ฐ”8 ์ŠคํŠธ๋ฆผ API ์†Œ๊ฐœ
beom kyun choi
ย 
PDF
Finding Functional Programming
NAVER Engineering
ย 
PDF
W14 chap13
์›…์‹ ์ „
ย 
PDF
Lambda ๋ž€ ๋ฌด์—‡์ธ๊ฐ€
Vong Sik Kong
ย 
PPTX
7๊ฐ€์ง€ ๋™์‹œ์„ฑ ๋ชจ๋ธ - 3์žฅ. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
Hyunsoo Jung
ย 
PPTX
Startup JavaScript 4 - ๊ฐ์ฒด
Circulus
ย 
PDF
์”น๊ณ  ๋œฏ๊ณ  ๋ง›๋ณด๊ณ  ์ฆ๊ธฐ๋Š” ์ŠคํŠธ๋ฆผ API
Arawn Park
ย 
PDF
8 swift แ„Œแ…ฎแ†ผแ„Žแ…ฅแ†ธแ„’แ…กแ†ทแ„‰แ…ฎ
Changwon National University
ย 
PPT
Refactoring - Chapter 8.2
Ji Ung Lee
ย 
PDF
ํ•จ์ˆ˜์  ์‚ฌ๊ณ  2์žฅ
HyeonSeok Choi
ย 
PDF
[TechDays Korea 2015] ๋…น์Šจ C++ ์ฝ”๋“œ์— ๋ชจ๋˜ C++๋กœ ๊ธฐ๋ฆ„์น ํ•˜๊ธฐ
Chris Ohk
ย 
PPTX
Modern effective c++ ํ•ญ๋ชฉ 3
ssuser7c5a40
ย 
PDF
์ž๋ฐ”8๊ฐ•์˜ 2๊ฐ•. Stream API
Sejong Park
ย 
PPTX
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค์˜ ํ”„๋กœํ† ํƒ€์ž…(prototype of class)
ํƒ‘ํฌ๋ฆฌ์—๋“€(๊ตฌ๋กœ๋””์ง€ํ„ธ๋‹จ์ง€์—ญ3๋ฒˆ์ถœ๊ตฌ 2๋ถ„๊ฑฐ๋ฆฌ)
ย 
Java8 ๋žŒ๋‹ค
Jong Woo Rhee
ย 
ํŠœํ„ฐ๋ง #9 20120409
Jong Hyuck Lim
ย 
7๊ฐ€์ง€ ๋™์‹œ์„ฑ ๋ชจ๋ธ 4์žฅ
HyeonSeok Choi
ย 
Java8 & Lambda
๊ธฐํ˜„ ํ™ฉ
ย 
13th chapter12 slide
์›…์‹ ์ „
ย 
์ž๋ฐ”8 ์ŠคํŠธ๋ฆผ API ์†Œ๊ฐœ
beom kyun choi
ย 
Finding Functional Programming
NAVER Engineering
ย 
W14 chap13
์›…์‹ ์ „
ย 
Lambda ๋ž€ ๋ฌด์—‡์ธ๊ฐ€
Vong Sik Kong
ย 
7๊ฐ€์ง€ ๋™์‹œ์„ฑ ๋ชจ๋ธ - 3์žฅ. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
Hyunsoo Jung
ย 
Startup JavaScript 4 - ๊ฐ์ฒด
Circulus
ย 
์”น๊ณ  ๋œฏ๊ณ  ๋ง›๋ณด๊ณ  ์ฆ๊ธฐ๋Š” ์ŠคํŠธ๋ฆผ API
Arawn Park
ย 
8 swift แ„Œแ…ฎแ†ผแ„Žแ…ฅแ†ธแ„’แ…กแ†ทแ„‰แ…ฎ
Changwon National University
ย 
Refactoring - Chapter 8.2
Ji Ung Lee
ย 
ํ•จ์ˆ˜์  ์‚ฌ๊ณ  2์žฅ
HyeonSeok Choi
ย 
[TechDays Korea 2015] ๋…น์Šจ C++ ์ฝ”๋“œ์— ๋ชจ๋˜ C++๋กœ ๊ธฐ๋ฆ„์น ํ•˜๊ธฐ
Chris Ohk
ย 
Modern effective c++ ํ•ญ๋ชฉ 3
ssuser7c5a40
ย 
์ž๋ฐ”8๊ฐ•์˜ 2๊ฐ•. Stream API
Sejong Park
ย 
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค์˜ ํ”„๋กœํ† ํƒ€์ž…(prototype of class)
ํƒ‘ํฌ๋ฆฌ์—๋“€(๊ตฌ๋กœ๋””์ง€ํ„ธ๋‹จ์ง€์—ญ3๋ฒˆ์ถœ๊ตฌ 2๋ถ„๊ฑฐ๋ฆฌ)
ย 

Similar to 10. pointer & function (9)

PDF
06์žฅ ํ•จ์ˆ˜
์œ ์„ ๋‚จ
ย 
PPTX
Lua ๋ฌธ๋ฒ• -ํ•จ์ˆ˜
Jaehoon Lee
ย 
PPTX
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜
์œ ์ง„ ๋ณ€
ย 
PDF
6 function
์›…์‹ ์ „
ย 
PDF
Reverse Engineering 2015.02.09
fromitive
ย 
PDF
12์žฅ ์ƒ์† (๊ณ ๊ธ‰)
์œ ์„ ๋‚จ
ย 
PDF
์ฝ”๋”ฉ์ธ์นดํŽ˜ C&JAVA ๊ธฐ์ดˆ๊ณผ์ • Cํ”„๋กœ๊ทธ๋ž˜๋ฐ(3)
์œ ์ต์•„์นด๋ฐ๋ฏธ
ย 
PPTX
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ+แ„’แ…กแ†ทแ„‰แ…ฎแ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต 20160229
Yong Joon Moon
ย 
PPTX
C์–ธ์–ด ์„ธ๋ฏธ๋‚˜ - ํ•จ์ˆ˜
SeungHyun Lee
ย 
06์žฅ ํ•จ์ˆ˜
์œ ์„ ๋‚จ
ย 
Lua ๋ฌธ๋ฒ• -ํ•จ์ˆ˜
Jaehoon Lee
ย 
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜
์œ ์ง„ ๋ณ€
ย 
6 function
์›…์‹ ์ „
ย 
Reverse Engineering 2015.02.09
fromitive
ย 
12์žฅ ์ƒ์† (๊ณ ๊ธ‰)
์œ ์„ ๋‚จ
ย 
์ฝ”๋”ฉ์ธ์นดํŽ˜ C&JAVA ๊ธฐ์ดˆ๊ณผ์ • Cํ”„๋กœ๊ทธ๋ž˜๋ฐ(3)
์œ ์ต์•„์นด๋ฐ๋ฏธ
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ+แ„’แ…กแ†ทแ„‰แ…ฎแ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต 20160229
Yong Joon Moon
ย 
C์–ธ์–ด ์„ธ๋ฏธ๋‚˜ - ํ•จ์ˆ˜
SeungHyun Lee
ย 
Ad

More from ์›…์‹ ์ „ (20)

PDF
15 3. modulization
์›…์‹ ์ „
ย 
PDF
15 2. arguement passing to main
์›…์‹ ์ „
ย 
PDF
14. fiile io
์›…์‹ ์ „
ย 
PDF
13. structure
์›…์‹ ์ „
ย 
PDF
12 2. dynamic allocation
์›…์‹ ์ „
ย 
PDF
12 1. multi-dimensional array
์›…์‹ ์ „
ย 
PDF
11. array & pointer
์›…์‹ ์ „
ย 
PDF
9. pointer
์›…์‹ ์ „
ย 
PDF
7. variable scope rule,-storage_class
์›…์‹ ์ „
ย 
PDF
6. function
์›…์‹ ์ „
ย 
PDF
5 2. string processing
์›…์‹ ์ „
ย 
PDF
5 1. character processing
์›…์‹ ์ „
ย 
PDF
15 1. enumeration, typedef
์›…์‹ ์ „
ย 
PDF
4. loop
์›…์‹ ์ „
ย 
PDF
3 2. if statement
์›…์‹ ์ „
ย 
PDF
3 1. preprocessor, math, stdlib
์›…์‹ ์ „
ย 
PDF
2 3. standard io
์›…์‹ ์ „
ย 
PDF
2 2. operators
์›…์‹ ์ „
ย 
PDF
2 1. variables & data types
์›…์‹ ์ „
ย 
PDF
Goorm ide ๊ต์œก์šฉ๋ฒ„์ „ for skku(ํ•™์ƒ)
์›…์‹ ์ „
ย 
15 3. modulization
์›…์‹ ์ „
ย 
15 2. arguement passing to main
์›…์‹ ์ „
ย 
14. fiile io
์›…์‹ ์ „
ย 
13. structure
์›…์‹ ์ „
ย 
12 2. dynamic allocation
์›…์‹ ์ „
ย 
12 1. multi-dimensional array
์›…์‹ ์ „
ย 
11. array & pointer
์›…์‹ ์ „
ย 
9. pointer
์›…์‹ ์ „
ย 
7. variable scope rule,-storage_class
์›…์‹ ์ „
ย 
6. function
์›…์‹ ์ „
ย 
5 2. string processing
์›…์‹ ์ „
ย 
5 1. character processing
์›…์‹ ์ „
ย 
15 1. enumeration, typedef
์›…์‹ ์ „
ย 
3 2. if statement
์›…์‹ ์ „
ย 
3 1. preprocessor, math, stdlib
์›…์‹ ์ „
ย 
2 3. standard io
์›…์‹ ์ „
ย 
2 2. operators
์›…์‹ ์ „
ย 
2 1. variables & data types
์›…์‹ ์ „
ย 
Goorm ide ๊ต์œก์šฉ๋ฒ„์ „ for skku(ํ•™์ƒ)
์›…์‹ ์ „
ย 
Ad

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