인프런 커뮤니티 질문&답변
6.8 어쩨서 함수안에서 dereference 한 값이 함수밖에서도 영향을 주나요?
작성
·
191
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가 간접참조한거니까요 !





