본문 바로가기

C programming/[Algorithm problem]

#1-6. 포인터의 활용

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
반응형

'C programming > [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
댓글