Pointer & Functions
2
Call-by-Value
§ Call-by-Value
– 함수 호출시 argument의 값(value)이 parameter 로 넘어가는
형식으로 함수가 호출되는 것
– 값만 copy되므로, function안에서 변경...
3
Call-by-Value
1 1
main 의 a
function 의 a
main() function function() function
a = a + 1 ;
function(a); 가 호출될 때
main의 a가 가진...
4
Call-by-Reference
§ Call-by-Reference
– argument의 값이 아닌, argument의 주소를 함수에 넘기는
방식으로 함수를 호출하는 방식
– 주소를 통하여 원래 변수의 값을 함수 내...
5
Call-by-Reference
[Ex]
void func1(int *pa) ;
int main(void) {
int a=1;
func1(&a);
printf(“after function call : %dn”, a)...
6
Call-by-Reference
1 1000
main 의 a
function 의 pa
main() function function() function
*pa = *pa + 1 ;
function() 가 호출될 때
m...
§ Swap Function
7
Call-by-Reference
[Ex]
void swap(int i, int j) {
int temp = i ;
i = j;
j = temp;
}
int main(void) {
int ...
§ Swap Function
8
Call-by-Reference
[Ex]
void swap(int *p, int *q) {
int temp = *p ;
*p = *q;
*q = temp;
}
int main(void) ...
Call-by-Reference
§ 두 포인터 변수의 값을 swap하고 싶다.
9
[Ex]
void swap( ??, ?? ) {
??
}
int main(void) {
int a=3, b=7;
int *p = &a, ...
§ 두 포인터 변수의 값을 swap하고 싶다.
10
Call-by-Reference
[Ex]
void swap(int **pp, int **qq) {
int *temp = *pp ;
*pp = *qq;
*qq = tem...
Upcoming SlideShare
Loading in …5
×

10. pointer & function

363 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
363
On SlideShare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

10. pointer & function

  1. 1. Pointer & Functions
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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

×