본문 바로가기

프로그래밍/C 기초

[C언어 강좌] #7 - scanf , 메모리 주소

안녕하세요.

우리는 printf를 사용할때 $include <stdio.h> 를 이용해서 stdio.h를 불러왔었습니다.


stdio는 표준입출력의 약자라고 했죠?

근데 우리는 지금까지 printf밖에 안썼습니다.

출력밖에 안했던것이죠.


오늘은 scanf를 통해 입력을 배워봅시다.



scanf에 서식문자와 변수의 주소를 적어주면 입력한값을 서식에 맞춰서 그 주소에 저장해줍니다.


에? 변수에도 주소가 있냐고요?

물론이죠. 포인터를 다룰때 더 자세하게 배우게되겠지만 간단하게 알고가봅시다


저번에 변수를 배울때 변수가 무엇이라고했었나요?

"값을 저장할 수 있는 메모리 공간에 붙은 이름"

라고 배웠었죠.

값을 저장할수 있는 메모리 공간에 주소가 있는겁니다.


우리도 집마다 각각 주소가 있지않습니까?

변수도 메모리공간이라는 집에서 살고있는겁니다. 그곳에서도 주소가 있는거죠.

그리고 주소를 알려줘야만 그곳에 찾아가서 값을 저장해줄수 있게됩니다.


그럼 대체 주소는 어떻게 알아낼까요?

int num = 0;

이 변수의 주소를 알고싶다면 앞에 &를 붙여주시면 됩니다.


에? 이건 저번에 배운 and 비트연산자 아니였나요?

& 옆에 값이 있을경우는 and비트연산자가 되지만 오른쪽에만 값이 있을경우에는 주소를 얻어옵니다.



num1 주소를 10진수로 출력해보았습니다.

2686652라고 출력이 되네요. 저게 변수의 주소값입니다.


num1은 2686652번지에 있는 메모리공간에 서식중이십니다.



그럼 주소값도 알았으니 이제 scanf로 값을 저장할수 있습니다.

scnaf("%d", &num1);

이렇게 printf와 마찬가지로 서식문자를 이용합니다.

num1의 주소값으로 가서 입력한것을 10진수 서식에 맞춰 저장하는것이죠.




한번 예제를 만들어봤습니다.


한번 실행시키고 10을 입력해보겠습니다.



짠. 정상적으로 출력되네요.