[C] 왜 scanf에서는 주소값을 인자로 받는가 ?
2024. 7. 27. 21:17ㆍMemorizing/C
Python, Java를 하던 사람 입장에서는 메모리와 상호작용을 직접적으로하는 저수준 언어인 C에서 생소한 개념 혹은 직관적으로 와닿지 않는 부분이 여러가지 있다. 그 중 첫 번째로 만나게 되는 것은 scanf 이다.
scanf란 ?
scanf는 scan formatted의 약자로 정해진 타입으로 standard input을 통해서 입력받는 함수이다. 아래와 같이 쓴다.
int a;
scanf("%d", &a);
왜 scanf에서는 포인터를 쓰는가?
C에서는 변수를 먼저 메모리에 할당하여 쓰게된다. 우리는 scanf 함수를 호출하여 std in을 받으면 그 값이 a라는 int형 변수에 할당되길바란다. 따라서 아래와 같이 사용하면 된다고 직관적으로 생각할 수 있다.
int a;
scanf("%d", a);
하지만 이렇게 scanf 함수에 전달하면, 함수가 스택 프레임에서 소멸되는 순간, std in으로 받은 것이 사라질 것이다. 따라서 포인터를 써서 변수의 값을 직접적으로 바꾸게된다.
포인터를 사용하게 되면 변수의 값을 직접적으로 바꿀 수 있게 되고, 아래와 같은 형식으로 변수의 값을 직접적으로 바꿀 수 있게된다.
*(&a) = "사용자 입력 값"
위와 같은 이유로 scanf에서 포인터를 이용하여 값을 입력받는 것이다.
'Memorizing > C' 카테고리의 다른 글
[C] 문자열과 배열 (0) | 2024.07.28 |
---|---|
[C] 배열 인덱싱 연산자 (0) | 2024.07.28 |
[C] 포인터 변수를 사용하는 swap 함수의 이해 (0) | 2024.07.28 |
[C] int 그리고 음수의 표현에 대한 이해 (0) | 2024.07.27 |