[C] scanf가 변수의 주소를 받는 이유
만약 scanf에 num이라는 변수를 넘겨주었다면, scanf는 num이라는 변수 자체를 사용하는 것이 아닙니다.
scanf내부에 다른 변수를 선언해서 그 변수에 num값을 대입하고, 대입한 값을 이용해 변수를 출력합니다.
이렇게 하는 일차적인 이유는 scanf내에서 출력을 위해 num값을 이리저리 바꾸다 보면 문제가 생길 수 있기 때문입니다.
예를 들어 n을 입력하면 n+1을 출력하는 함수 add()라는 게 있다고 생각해봅시다.
int num = 3;
int result = add(num);
printf("num = %d, result = %d", num, result);
- add 함수가 변수의 값을 받아 사용하는 경우의 결과
num = 3, result = 4
- add 함수가 변수를 직접 사용하는 경우의 결과
num = 4, result = 4
프로그램을 작성하는 사람 입장에서는 당연히 1을 생각할 수 밖에 없습니다.
add()함수 내부에서 num값이 어떻게 바뀔 지 알 수도 없구요.
따라서 C언어에서 함수에 값을 줄 때, 그 변수의 값만을 사용하게 하는 것입니다.
하지만 경우에 따라 num의 값을 실제로 바꾸어야 할 수 있는데, 이 경우 변수의 주소를 값으로 넘겨주어 처리합니다.
그러면 함수가 직접 변수가 저장된 곳에 접근해서 변수의 실제 값을 바꿀 수 있습니다.
그렇기에 scanf는 변수의 주소값을 인자로 받는 것입니다.
Author And Source
이 문제에 관하여([C] scanf가 변수의 주소를 받는 이유), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@toezilla/C-scanf가-변수의-주소를-받는-이유저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)