• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

6.8 어쩨서 함수안에서 dereference 한 값이 함수밖에서도 영향을 주나요?

21.06.12 22:03 작성 조회수 119

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

안소님의 프로필

안소

2021.06.13

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가 간접참조한거니까요 !