인프런 커뮤니티 질문&답변

이성주님의 프로필 이미지
이성주

작성한 질문수

홍정모의 따라하며 배우는 C언어

6.17 for 루프를 배열과 함께 사용하기

마지막 예제 질문있습니다!!

작성

·

173

0

안녕하세요 홍정모 교수님!!

질문이 있어서 여쭤봅니다.

#define SIZE 5

int main()

{

int my_arr[SIZE];

int sum = 0;

printf("Enter 5 numbers : ");

for (int i = 0; i < SIZE; ++i)

{

scanf("%d", &my_arr[i]);

sum += my_arr[i];

}

printf("Sum = %d", sum);

return 0;

}

제가 구현한 코드입니다. 불드친 부분을 제가 my_arr 로 했을때는 sum의 값이 이상하게 출력이 되는데, 그 이유를 알고 싶습니다!! 강의에서는 &my_arr[i]와 my_arr를 같이 써도 무방하다고 하셨다고 제가 이해를 했습니다만, 어디가 어떻게 잘못되었는지 궁금합니다.

항상 좋은 강의 감사드립니다.

답변 2

2

안녕하세요.

우선 이 답변은 아마 질문자님께서 포인터와 배열의 관계에 대해서 배우시고 나서야 이해가 가실 것 같습니다. 그래서 만약 제 답변이 이해가 되지 않으시다면 나중에 포인터까지 공부 하시고 다시 보시면 됩니다! 

 &my_arr[i]와 my_arr 가 같은 것이라기보단 my_arr 와 값이 같은 것은 &my_arr[0] 입니다. 배열의 이름(my_arr)은 배열의 첫번쨰 원소의 주소가 담겨져 있는 포인터와 같은 역할을 하기 떄문입니다. (아마 포인터 모르시면 제가 말씀드리는 이 부분이 이해가 잘 안되실텐데 나중에 포인터 공부하시면 이해되실거에요!) 

그리고 배열의 모든 원소들을 입력하려고 하시는건데 &my_arr[i] 가 아닌 그냥 my_arr 이라고 하시면 for문의 i++ 을 영향을 못 받습니다. i는 0부터 SIZE -1 까지 증가 되면서 my_arr[0], my_arr[1] ... 이렇게 모든 원소에 입력을 할 수 있게 되는건데 그냥 my_arr 로만 적으시면 for문 도는 동안 원소들이 아닌 my_arr 에만 고정적으로 입력받겠다고 하시는거라 모든 원소들이 아닌 for문 도는 내내 my_arr[0] 첫번째 원소에만 입력을 받는 꼴이 됩니다. 

따라서 질문자님께서 scanf("%d", my_arr);라고 하셨다면 이는 for문 도는 동안 내내 첫 번째 원소에만 입력을 받으신 셈이 됩니다. 따라서 첫번쨰 원소를 제외한 나머지 원소들은 입력이 되지 못해 쓰레기 값으로 남아있고 이 쓰레기값들과 합산을 하였기 때문에 이상한 값이 나온 것입니다.  

for문을 모두 실행 완료한 후 빠져나왔을 떄 모습입니다. 이렇게 첫번째 원소만 입력 된 것을 확인하실 수 있습니다.

0

이성주님의 프로필 이미지
이성주
질문자

감사합니다!!!!!!!

이성주님의 프로필 이미지
이성주

작성한 질문수

질문하기