c언어를 시작하면 printf에서는 &를 안썼는데, scanf에서는 &를 쓸때도 있고, 안쓸때도있습니다.
이 부분이 많이 헷갈리실 것입니다.
변수앞에 &을 붙여 주는 이유는 해당 변수의 주소를 받기 위해서입니다.
(즉, 값을 입력하려면 변수의 주소가 필요하기 때문에 &를 사용해야 합니다.)
만약에 a라는 정수형 변수에 10이라는 값이 저장되어 있다면
출력문에서 해당 변수값을 가져와서 그대로 출력을 해 주면 됩니다.
int a=20;
printf("a의 값 = %d\n",a);
그러나 입력문에서는 값을 메모리(버퍼)에 저장하게 되는데 여기서 scanf() 함수에 포함된 '&'기호를 주소 연산자(&)라고 합니다.
즉 사용자가 입력할 값을 해당 주소에 저장하라는 신호를 보내는 것입니다.
그런데 문자열에서는 "&" 기호를 사용하지 않는데 그것은 문자열 자체에 주소를 포함하고 있기 때문입니다.
int a;
char b[20];
scanf("%d", &a); //&를 써야한다.
scanf("%s", b); //&를 안써도 된다. b 자체가 주소