scanf 함수에서 %s 서식으로 받을 때!
char arr[100]="hello! scanf";
1번 scanf("%s",&arr);
2번 scanf("%s",arr);
무엇이 맞다고 생각하시나요???
열혈강의 윤성우 저자의 책 2007년 이전의 책에는 &를 붙이지 않는 것이 맞다고 하는데...
제가 실수로 넣고 실행을 했더니 멀쩡히 실행이 되더군요.. 컴파일러가 알아서 수정을 해준 것인지
아니면 문법 표준이 바뀌어서 그런 것인지 궁금합니다...
물론 scanf 의 인자 전달로는 arr배열의 내용이 변경되어야 하기 때문에 call-by-reference방식으로(call-by-pointer)
전달되어야 하기 때문에 배열이름인 arr 이 오는 것이 맞다고 생각했지만....
또 생각해보니
arr 또한 역시 배열의 첫 번째 요소의 주소값을 나타내고,
&arr 은 arr배열의 주소 값 , 역시 첫 요소의 주소값을 나타내더라구요....
무엇이 맞는걸까요??? 혹시 제가 무슨 오류를 범하고 있는지.. 지적부탁드립니다!!!!
감사합니다~
아래 그림은 소스와 실행파일입니다..
실행환경은 맥os vim, gcc 컴파일러입니다!!!!!!
2가 맞지. 1이 되는 이유는 코드는 잘못되었지만 저 경우에는 결과가 똑같기 때문이지
그럼혹시 결과가 다른 경우도 존재하나요? 예를 하나만 들어주시면 안될까요?ㅋㅋㅋㅋㅋ
그냥 포인터 주소랑 값이랑 다른 경우면 1, 2가 다름. a가 a[0]을 가르키는 포인터라는 걸 알면 이해가 될 것임.
그러니까 printf("...", a, &arr;); 에서 arr는 포인터 값을 출력한 거고 &arr;는 포인터의 주소를 출력한 거지.