마지막 예제 질문있습니다!!
232
작성한 질문수 3
안녕하세요 홍정모 교수님!!
질문이 있어서 여쭤봅니다.
#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문을 모두 실행 완료한 후 빠져나왔을 떄 모습입니다. 이렇게 첫번째 원소만 입력 된 것을 확인하실 수 있습니다.
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
50
3
main 함수에서 왜 int만 선언이 되는걸까요
1
54
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
53
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
46
1
프로토타입과 함수간의 인자 불일치
1
72
2
12.12 헤더 관련 질문
1
59
2
Visual Studio Community 2026 사용 문의
1
136
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
59
2
getchar(), putchar()
1
92
3
강의자리ㅛ
1
78
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
112
2
소스파일안에 여러 파일
1
75
2
F5와 F7의 차이
1
75
2
c = TWO * (a+b); 에서 a와 b는?
1
58
2
; 세미콜론을 붙이는 기준에 문의
1
68
1
Step over 기능 문의
1
52
2
2.6 강의 따옴표 출력 규칙 문의
1
74
2
int main 함수 관련 오류 문의
1
67
2
13.4 words[0]
0
60
2
11.7 함수를 구현해 봤습니다.
1
62
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
64
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
53
2
11.5 코드 구현
1
67
2





