Programming/C++

06. 포인터 와 함수 , 더블포인터

KingSSSSS 2017. 12. 20. 09:57
함수 인자 전달 방식 설명

함수 호출 시 전달 되는 인자의 값은 매개변수에 복사가 된다.
void main()
{
int num = 100;
// num에 저장된 값이 인자(매개변수) pn에 복사됨
Test(num);
}
int Test(int pn){
// 실제로 전달되는 거은 num이 아닌 num에 저장되 값을
// pn에 복사해서 넘기는 뿐이다
}

Call - By - Value
함수 인자 전달 값 복사 방식

함수 호출 시 인자 전달을 하면 함수 호출 되는 시점

으 로 인자가 메모리에 새로이 할당이 되어서 넘겨준

변수랑은 별게의 메모리 공간을 갖으므로 넘겨준 변수와

인자는 별개로 본다
Call - By - Reference
함수 인자 전달 값 메모리 주소 참조 방식

함수 호출 시 인자 전달을 하면 함수를 빠져 나와서 함수 안에서

처리된 작업 값 변경 등 이 함수를 빠져 나와 서 도 적용된 상태

예시 표준 API : scanf();

일반 변수를 함수 인자로 넘길시 Call - By - Reference
void test(int *num1, int *num2)
{
int pp = *num1;
*num1 = *num2;
*num2 = pp;
}
void main()
{
int num1 = 10;
int num2 = 20;
test(&num1,&num2);
printf("1 = %d , 2 = %d",num1,num2);
// 1 = 20 , 2 = 10 표시
// scanf() 함수 처럼 변수를 인자로 넘겨서
// 변수에다 직접적으로 값을 설정하는 방식
}

일반 적인 포인터 변수를 함수 호출 시 인자로 넘겨진 상황
싱글포인터 Call - By - Value 상황이 된다
void SetString(char* str){
printf("%s \n",str);// Test 출력 1
str = "장지환";
printf("%s \n",str);// 장지환 출력 2
}
void main()
{
char *name = "Test";
SetString(name);
printf("%s \n",name);// Test 출력 3
}

더블포인터 변수를 함수 호출 시 인자로 넘겨진 상황
더블포인터 Call - By - Reference 상황이 된다
void SetString(char** str){
printf("%s \n",*str);// Test 출력 1
*str = "장지환";
printf("%s \n",*str);// 장지환 출력 2
}
void main()
{
char *name = "TEST";
SetString(&name);
printf("%s \n",name);// 장지환 출력 3
}


일반 적으로 함수 호출 시 인자 넘긴다면 인자는 함수 호출 시
매모리 가 할당되어 호출 전 변수의 값을 복사 하고 호출이
끝남과 동시에 소멸된다
하지만 함수 인자가 더블 포인터 이다면 함수 호출전 포인터 변수의 주소를 그대로 가지고 와 서 사용한다 함수 호출이 끝나 더래도 함수 안에서의 더블포인터 인자로 사용을 하엿다면 그 결과는 계속 유지 된다

더블 포인터 설명