메모리에 저장되는 모든 데이터는 메모리 주소에 의해 관리된다. 운영체제는 제한된 메모리에 데이터를 저장해야 하므로 주소개념을 데이터를 구분하여 관리한다. 즉, 메모리에 할당되는 모든 것은 주소를 갖는다.
주소연산자 (&)를 사용하면 연산자 뒤에 오는 변수에 할당된 메모리 주소를 반환한다.(메모리 시작주소 반환)
printf("%d", &num); -> 위 사진 경우면 103이 출력 된다.
표준입력장치인 키보드로 부터 데이터를 입력받을 수있는 함수이다. "%"로 시작하는 형식지정자를 사용해 데이터를 입력받아 저장한다.
scanf("%d", &num); -> "입력될 형식지정자", &저장될 변수의 주소
여기서 변수 이름 앞에 주소연산자 (&)는 필수이며 입력된 데이터를 메모리에 저장하기 위해 변수의 시작주소를 얻기 위함이다.
예시 코드
#include <stdio.h>
int main(void)
{
char ch; //A
short int num1; //100
int num2; //200
long int num3; //300
float f_num; //1.1
double d_num; //5.2
// 값 입력하고 enter 눌렀을때 뒤에 char를 입력받으면 enter 가져감
// 값 입력 받을 시 enter,tab,space bar 검사해서 버린다.(char 는 가져감)
// %*c -> 공백버퍼 없애준다.
printf("input short int ? ");
scanf("%hd",&num1);
printf("input char ? ");
scanf(" %c", &ch);// 공백지정자 -
printf("input int ? ");
scanf("%d",&num2);
printf("input long int ? ");
scanf("%ld",&num3);
printf("input float ? ");
scanf("%f",&f_num);
printf("input double ? ");
scanf("%lf",&d_num);
printf("ch: %c, num1 : %hd, num2 : %d, num3: %ld, f_num : %f , d_num : %lf \n",
ch, num1, num2, num3, f_num, d_num );
return 0 ;
}