신규 블로그를 만들었습니다!

2020년 이후부터는 아래 블로그에서 활동합니다.

댓글로 질문 주셔도 확인하기 어려울 수 있습니다.

>> https://bluemiv.tistory.com/

1. 포인터 변수를 인자로 갖는 함수

함수를 호출할떄 주소를 이용해서 호출을 할 수 있다.

 

일반적인 함수

// 함수 생성

int func(int num1, int num2){

// 내용

return x;

}

 

// 함수 호출

int a = 5;

int b = 10;

result = func(a, b);

 

#include <stdio.h>
 
int func(int num);
 
int main(void) {
 
    // 일반 함수의 경우
    int num1 = 10;
    int result = func(num1);
 
    // num1의 값은 변하지 않는다.
    printf("num1 = %d\n", num1);
    printf("result = %d\n\n", result);
 
    return 0;
}
 
int func(int num) {
    num = num + 100;
    return num;
}
​

 

 

 

인자의 값으로 주소가 들어가는 함수도 있다.

// 함수 생성

int func(int* num1, int* num2){

// 내용

return x;

}

 

// 함수 호출

int a = 5;

int b = 10;

result = func(&a, &b);

 

#include <stdio.h>
 
int func(int* num);
 
int main(void) {
 
    // 포인터를 이용한 함수의 경우
    int num1 = 10;
    int result = func(&num1);
 
    // num1의 값이 변하는 것을 알 수 있다.
    printf("num1 = %d\n", num1);
    printf("result = %d\n\n", result);
 
    return 0;
}
 
int func(int* num) {
    // 메모리주소를 이용해서 접근하므로..
    // num의 데이터 값에 직접적으로 영향을 준다.
    *num = *num + 100;
    return *num;
}
​

 

 

 

그렇다면 왜 이러한 방법을 사용할까?

 

포인터의 개념을 이해하고 있다면 2개의 차이가 존재하는 것을 알 수 있다.

 

결론부터 얘기 하면, 일반 함수의 경우는 int a, int b의 값에 영향을 주지 않는다.

하지만 포인터 변수를 갖는 함수는 int a, int b의 데이터 값에 영향을 준다는 것을 알 수 있다.

 

 

 

2. 함수에서의 포인터변수를 이용한 배열 접근방법

 

#include <stdio.h>
 
void func(int* pointer, int num);
 
int main(void) {
 
    int nums[5] = {10, 3, 5, 8, 100};
    func(nums, 5);
 
    return 0;
}
 
void func(int* pointer, int num) {
    for (int i = 0; i<num; i++) {
        printf("pointer + %d = %x\n", i, pointer + i);
        printf("pointer[%d] = %d\n", i, pointer[i]);
    }
}
​

 

 

 

 

3. 주소를 반환하는 함수

지역변수의 주소를 반환하는 함수의 경우에는 static을 이용해서 선언해줘야 한다.

 

지역변수는 { ... } 중괄호 안에서만 존재하는 값으로

중괄호안의 내용을 모두 수행한뒤에는 지역변수는 소멸 될 수도 있다.

 

불안정한 상태에 존재하게 되므로 static 을 이용해서 값 안정적이게 해준다.

즉, static이라는 메모리 공간을 이용해서 변수가 소멸되지 않게 해준다.

 

 

3-1. static을 사용하지 않은 경우

 

#include <stdio.h>
 
int* func();
 
int main(void) {
 
    int* pTemp = NULL;
    
    pTemp = func();
 
    printf("pTemp = %x\n", pTemp);
    printf("&pTemp = %x\n", &pTemp);
    // 알수 없는 이상한 값이 나온다.
    printf("*pTemp = %d\n", *pTemp);
 
    return 0;
}
 
int* func() {
 
    int num = 10;
 
    return &num;
}​

 

 

 

3-2. static을 사용한 경우

 

#include <stdio.h>
 
int* func();
 
int main(void) {
 
    int* pTemp = NULL;
    
    pTemp = func();
 
    printf("pTemp = %x\n", pTemp);
    printf("&pTemp = %x\n", &pTemp);
    printf("*pTemp = %d\n", *pTemp); // 10
 
    return 0;
}
 
int* func() {
 
    // static을 사용해서 선언
    static int num = 10;
 
    return &num;
}
​

 

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기