scanf 배열,문자열 입력

김현지·2023년 9월 15일

C언어

목록 보기
3/3

개요

scanf함수로 int형 배열이나 문자열을 입력받을때 항상 드는 궁금증이 있었다. 정수형 배열은 주소를 알려주는 '&(ampersand)'를 붙이는데 char형 배열(문자열)은 '&'를 붙이지 않아도 값이 잘 저장된다는 것이었다.

원인

그 이유는 배열이름 자체가 주소를 뜻하기 때문이었다.

보통 int형 배열을 입력받을땐

int a[10];
    
for (int i = 0; i < 10; i++) {
    scanf("%d", &a[i]);

이런 식으로 a[i]값에 하나하나씩 값을 입력받는다.

그러나 char형 배열(문자열)은

char b[10];
   
scanf("%s", b);

이런 식으로 한번에 입력받기 때문에 반복문을 이용해 한 자리씩 입력을 받을 필요가 없다.

이 때문에 &가 필요하고 안 하고의 차이가 발생하는 것이다.

배열의 이름은, 그 자체가 주소이기 때문에 문자열은 &를 이용해 주소를 알려주지 않아도 알아서 자기 자리를 잘 찾아간다.
그러나 정수형 배열은 a[i] 값이 주소가 아니기 때문에 &를 따로 써서 주소를 알려주어야 하는것이다.

예외

만약 정수형 배열을 scanf함수에서 &를 쓰지 않고 입력받고 싶다면

int a[10];
    
for (int i = 0; i < 10; i++) {
    scanf("%d", a+i);

이런식으로 a(배열의 시작주소) + i를 해주면 된다.

0개의 댓글