qhqo0503   2년 전

ex 

n = 5

1 2 3 4 5 입력

하면 함수 내부에 있는 printf 로 출력해 봤을 때


1 2 3 4 5

가 아닌

1 0 2 0 3


이 출력 되는데 어떤 이유인지 모르겠습니다. 

djm03178   2년 전

arr이 int *arr[1000000]이 아닌 int arr[1000000]이 되어야 합니다.

int *arr[1000000]은 크기가 100만인 "int형 포인터"의 배열을 만드는 것입니다. 그래서 arr의 각 원소는 int가 아니라 int형 포인터입니다. 만일 포인터의 크기가 8바이트인 환경에서 실행했다면, 입력을 받을 때는 arr[i]가 8바이트씩 건너뛰면서 그 중 4바이트에만 입력을 받겠지만, sum 함수에 넘겨지면서부터는 이를 a[i]를 int형으로 인식하려고 하기 때문에 4바이트씩 건너뛰게 되고, 그래서 한 번은 입력받은 값이 나오지만 그 다음에는 아무것도 쓰여지지 않은 4바이트를 출력하려고 하게 되므로 초기화 때 들어간 값인 0이 그대로 나오게 됩니다.

이런 코드는 분명히 컴파일할 때 대문짝만한 경고 메시지가 나올 수밖에 없습니다. 에러가 없다고 그냥 넘기지 말고, 경고도 빠짐없이 읽고 최소한 무슨 의미인지 모르는 경고는 하나도 없을 때까지 코드를 고치는 습관을 들여야 합니다.

qhqo0503   2년 전

답변 정말 감사합니다.

앞으로 더욱 꼼꼼히 공부하고 경고 또한 제대로 공부하겠습니다! 감사합니다!!

댓글을 작성하려면 로그인해야 합니다.