728x90
반응형
포인터의 장점은 메모리 주소를 사용할 수 있다는 점이다. 따라서 함수를 호출 할 때 포인터를 매개변수로 사용하면 매개변수를 마치 반환 값의 용도로 사용할 수 있다.
다음 예제를 확인해보자.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//call by refernce을 사용한 포인터 활용
void Square(int Lv,int *ret){
if(Lv == 2) *ret = *ret * *ret; // 제곱근인 경우
else if(Lv == 3 ) *ret = *ret * *ret * *ret;
}
int main(){
int num,lev,cnt;
printf("C 프로그래밍에서의 포인터 예제 - 2\n");
lev = 2; num = 3,cnt = num;
Square(lev,&num);
printf("Level : %d | Number: %d => Return Value : %d\n\n",lev,cnt,num);
lev = 3; num = 4, cnt = num;
Square(lev,&num);
printf("Level : %d | Number: %d => Return Value : %d\n\n",lev,cnt,num);
}
위의 코드는 level이 제곱근의 계수, num가 제곱을 실행할 숫자로, 제곱근을 계산하고 출력하는 코드이다. 이때 눈 여겨볼 코드는 6번과 20번 줄이다.
6번 코드 줄을 보면 Square 함수는 인자로 int값과 포인터값을 가진다.
void Square(int Lv,int *ret){ if(Lv == 2) *ret = *ret * *ret; // 제곱근인 경우 else if(Lv == 3 ) *ret = *ret * *ret * *ret; } |
이는 20번 줄을 보면 이해 할 수 있다.
Square(lev,&num); |
20번 줄에서 보면 인자로 num의 주소를 보낸다. 주소를 보냈을 때의 장점은 지역변수로 사용한 num이 다른 함수에서 작동할 수 있다는 것이다. 즉 변수의 주소를 사용하여 공간에서의 제약이 사라진다.
20번 줄에서는 num의 주소를 인자로 받은 상태이므로 참조 연산자를 통해 연산을 실행한다.
이처럼 매개변수를 일반 변수 대신 포인터로 사용하는 것을 Call-By-Reference 라고 한다.
Call-By-Reference : 매개변수를 일반 변수 대신 포인터로 사용하는 것
728x90
반응형
'Datastructure > [Algorithm problem]' 카테고리의 다른 글
#2-2. 단일 연결 리스트의 생성 (0) | 2023.09.04 |
---|---|
#2-1. 연결 리스트 (0) | 2023.09.04 |
#1-5. 포인터 배열과 포인터 연산 (0) | 2023.09.03 |
#1-4. 배열과 포인터 (0) | 2023.09.03 |
#1-3. 포인터 (0) | 2023.08.31 |