728x90
반응형

프로그래밍 교육 방법


- 계속 무언가를 호출하는 형태

이때 swap( ) 이라는 함수를 어떻게 만들어야 할까?

더 생각 하기 : 다른 함수를 통해서 두 개의 변수 값을 서로 바꾸려면?
- main 함수에 있는 변수 두 개의 값을 정렬을 하기 위해 서로 바꾸고 싶은데 자주 사용되는 기능이므로(main에 두면 지저분해지니까) 함수를 만들어서 호출하고 싶다면?
문제 해결 하기
- main안에서 변수 값을 temp변수를 사용하여 서로 변경하면 바뀌지만, 다른 함수로 두 변수 값을 call by value 보내서 바꾼다면 지역 변수 특성상 main 함수 영역에 있는 변수 값을 두 개 모두 바꿀 수 없음(return은 1개 값만 가지고 올 수 있으므로)
그렇다면 다른 방법을 찾아보자.
함수 호출 방법 : 주소에 의한 호출(call by address)
- 해결 방법
- main함수에 있는 변수의 주소값을 가지고 swap()함수를 호출하면 swap()함수에서 main함수의 변수 값을 바꿀 수 있음(이럴때 포인터 변수 사용)
- 바꾸기 위해서는 역참조 연산자를 사용해야 함

- 포인터도 변수이다. 변수는 저장 공간인데 여기서의 변수는 특수해서 주소를 값으로 가지는 변수라는 것.
- 일반 변수와 차별화를 두기 위해 포인터 변수를 선언할때에는 변수 앞이나 자료형 뒤에 * 를 붙이게 된다. 그래서 포인터 변수를 선언하는 방법은 intp, intq처럼 한다.
- 포인터변수는 주소값만 값으로 가지기에 .. &는 주소를 가리키는 의미이므로 intp에 a의 주소값을 넣고싶다면 intp = &a를 하면 된다.
- 포인터변수 P는 내려와서는 * 가 필요 없다.
- 근데 왜 주소를 넣을까? 이는 나중에 설명한다.
- 주소를 넘긴 후에 내가 정말 바꾸고싶은 것은 주소가 아니라 main의 a에 있는 값을 수정하고싶다면? 그럴때 역참조 연산자를 사용한다.
포인터가 주소를 가지려면 * 가 없다. 포인터 변수 앞에 * 를 넣으면 얘가 가리키는 a에 가서 값을 바꿀 수 있는 영향력을 주게 된다.

중요!
함수 호출 예제 sum(), swap()
#include<stdio.h>
int sum(int a, int b); // 함수 원형
void swap(int *p, int *q); // 함수 원형
int main(void){
int a, b, total;
printf("Input two integers : ");
scanf("%d%d", &a, &b); // 10 20
printf("a: %d, b: %d \n", a, b);
total = sum(a, b); // call by value
printf("** sum function call ** \n");
printf("%d + %d = %d \n", a, b, total);
swap(&a, &b); // call by address
// 주소를 넣어서 보낸다.
printf("** swap function call ** \n");
printf("a: %d, b: %d \n", a, b); // 20 10
return 0;
}
int sum(int a, int b){
int total;
total = a + b;
return total;
}
// swap은 sum과 달리 return값이 없으므로 앞부분이 void가 된다.
// 주소를 받을 수 있는 포인터 변수 int *p, *q가 있다.
void swap(int *p, int *q){
int temp;
temp = *p;
*p = *q;
*q = temp;
// return은 없다. 단지 위의 세 줄을 가지고 main의 값이 바뀐다.
}
++++++++++ console창 결과 값 ++++++++++
Input two integers : 10 20
a: 10, b: 20
** sum function call **
10 + 20 = 30
** swap function call **
a: 20, b: 10
요약
- 값에 의한 호출
- 주소에 의한 호출
- 포인터 변수
- 역참조 연산자(deference operator)
728x90
반응형
'AI > 머신러닝(ML)' 카테고리의 다른 글
[인공지능] 파이썬 기초 문법 | Variables & List (1) | 2023.01.11 |
---|---|
[인공지능] 파이썬 기초 문법 | 파이썬 개요 (0) | 2023.01.11 |
3 - 2 함수_함수와 매개변수 (0) | 2022.12.21 |
3 - 1 함수_사용자 정의 함수 (0) | 2022.12.21 |
2 - 4 프로그램 구조_전처리와 입출력 함수 (0) | 2022.09.20 |
댓글