[C] scanf가 변수의 주소를 받는 이유

952 단어 CC

만약 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);
  1. add 함수가 변수의 값을 받아 사용하는 경우의 결과
num = 3, result = 4
  1. add 함수가 변수를 직접 사용하는 경우의 결과
num = 4, result = 4

프로그램을 작성하는 사람 입장에서는 당연히 1을 생각할 수 밖에 없습니다.

add()함수 내부에서 num값이 어떻게 바뀔 지 알 수도 없구요.

따라서 C언어에서 함수에 값을 줄 때, 그 변수의 값만을 사용하게 하는 것입니다.

하지만 경우에 따라 num의 값을 실제로 바꾸어야 할 수 있는데, 이 경우 변수의 주소를 값으로 넘겨주어 처리합니다.

그러면 함수가 직접 변수가 저장된 곳에 접근해서 변수의 실제 값을 바꿀 수 있습니다.

그렇기에 scanf는 변수의 주소값을 인자로 받는 것입니다.

좋은 웹페이지 즐겨찾기