작성
·
165
1
//void printArray(int array[])
void print Array(int *array) 서로 같다
{
cout<<*array<<endl;//op 9
*array=100;//함수밖에서도 변수의 값을 바꿀수있다
}
int main()
{
int array[5]={9,7,5,3,1}
printArray(array);
cout<<array[0]<<" "<<*array<<endl;
}
선생님이 print array함수 안에서 *array=100 이런식으로 하면 함수밖에서도 변수의 값은 바꿀수있다하셨는데 그렇게 할려면 & reference operator 를 써줘야하는거 아닌가요? int main()에서 복사된값이 printArray 함수로 들어가는거일텐데 어쩨서 함수밖에서도 변수의 값이 바뀌나요?
답변 1
3
printArray(array); 가 호출되면서 printArray 함수의 매개변수인 int * array 에 main 함수에서 만든 array 값이 복사되어 저장됩니다. (printArray 함수의 매개변수인 array 와 main 함수에서 만든 array 배열은 이름만 같을 뿐 전혀 다른 별개의 개체입니다.) printArray 함수의 매개변수인 int * array 는 이 main 함수 배열인 array 배열의 주소를 가지게 된거에요.
printArray 함수 내부에서 *array = 100 한다면 (이게 "간접 참조" 개념이라는건 앞에서 배우셨을겁니다.) 이건 매개변수 array 가 가리키는 주소에 가서 그 메모리를 수정하겠다는 시도나 마찬가지입니다. 매개변수 array 가 현재 가리키는 주소는 main 함수의 array 배열이니 array 배열의 어떤 값에도 변화가 생기는 것입니다. array 배열의 메모리를 매개변수 array가 간접참조한거니까요 !