새소식

💻 Programming (프로그래밍)/C++

[C++] 포인터 사용 예제

  • -

요즘 포인터를 다루다가 헷갈리는 부분을 정리하고자 포스팅합니다.

 

 

우선 배열의 주소값을 포인터 매개변수로 사용할 수 있습니다.

void func(int *num) {...}

int main() {

    int num[] = {1, 2, 3, 4};
    func(num);

}

 

그럼 포인터와 배열의 이름의 다른점은?

배열의 이름은 const 포인터 입니다. 즉 상수값으로 되어있는 const 배열이죠

 

 


포인터의 조심해야 할 상황

int * func(){
	int num[] = {1, 2, 3, 4};
	return num;
}

int main(){
	int *ptr;
    ptr = func(); // error!!
}

func() 함수가 끝난 후, local 변수인 num[] 은 스택에서 버려야할 될 값, 즉 garbage value입니다. 따라서 ptr변수는 역참조(dereferenced)할게 없어져 버릴수도 있습니다.

 

 

Example

int * func(){
	int num[] = {1, 2, 3, 4};
	return num;
}

void gunc(){
	int mum[] = {5, 6, 7, 8};
}

int main(){
	int *ptr;
    ptr = func(); // error!!
    gunc();
}

func 함수가 스택에서 제거된 후, gunc() 함수가 덮어쓰이면서, 실상 ptr에는 gunc의 배열이 남아있게 됩니다. 따라서 ptr은 엉뚱한 gunc() 함수의 mum[] 변수를 참조해 버릴 수 있는 상황도 옵니다. 혹은 쓰레기 값이 들어가게 됩니다.

 


함수 포인터

int func(int a, int b){...}

int main(){

	int (*ptrFunc)(int a , int b);
    ptrFunc = func;

}

함수들에도 포인터가 있어서, 요론식으로 포인터를 사용해 함수를 변수처럼 이용 할 수 있습니다.

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.