scanf, 문자열

Min Hyeok·2021년 9월 16일
0

C언어 do it을 푸는 도중, ㄹㅇ 겁나귀찬ㅇ흔 문제 하나를 발견했다.

그런데 의문 점.

char name[3][16];

int i;

for (i = 0 ; i < 3 ; i++) {

    scanf("%s", name[i]);

}

여기에서,

첫번째, scanf는 뒤에 넣고싶은 내용을 쓸 때 &name[i] 이렇게 쓰는걸로 알고 있었는데, 왜 &가 없어도 되는가

두번째, name[3][16]은 2차원 배열인데, 왜 name[i]로 해도 돌아가는가?

의문이다.

답을 해결하면, 다시 돌아오겠다..

------ 10월 1일 ------

이제야 돌아왔다. 사실 답은 이미 알아냈었지만, 오기 귀찮다고 아 ㅋㅋ

우선 알아둬야 할게, "scanf"함수로 문자열을 입력 받으려면 "char 형"을 저장할 수 있는 메모리의 주소를 주ㅓ야한다. 그리고 배열은 수식에서 첫번째 요소의 주소로 변환되어서, &를 굳이 안붙혀도 char가 저장된 주소로 알아서 변환된다.

그리고 name[i]. 이 배열은 char 형 데이터를 16개 넣을 수 있는 배열이다.

만약 내가 name[i]라고 받으면, &name[i][0]과 같은 표현이 된다. 그래서 그냥 &를 안붙여도 scanf에 쓸 수 있고, 알아서 2차원 배열로 인식을 하는 것이다.

0개의 댓글