qqaz54   7년 전

디버거를 돌려보니까, IsOnlyMax함수로 count배열이 넘어가지 않고 배열의 첫번째 값만 넘어가더라구요..

그래서 IsOnlyMax의 값이 항상 0이 되버립니다..

제가 아직 이부분이 이해가 덜된건지는 몰라도 해결법을 모르겠네요... 어떻게 방법 없나요??

sgchoi5   7년 전

인자로 전달하는 것은 문제가 없는데, 로직 문제로 return 0 이 불리는 것은 아닌지...

그리고, 함수의 선언과 함수의 구현상에 parameter type 이 다르네요..

bupjae   7년 전

C/C++ 에서 특정 몇몇 경우에서 타입의 일부분을 잃게 되는 것을 decay 라고 부릅니다.

가장 흔히 발생하는 decay 중 하나는 함수를 호출할 때 배열을 pass-by-value 방식으로 넘겨주는 경우 입니다.

배열의 decay 가 발생할 경우, 배열의 첫 번째 extent ("첫 번째 크기"라고 생각하시면 됩니다) 를 잃으면서 포인터가 됩니다.


주어진 프로그램에서는 함수 IsOnlyMax 를 호출할 때 배열 count (타입 = int[26]) 을 pass-by-value 방식으로 넘겨주고 있습니다.

int[26] 에 decay 를 적용하면 int* 가 됩니다. (이런 이유 때문에 함수 인자 선언에서 4번째 줄의 int count[] 와 33번째 줄의 int* count 는 동일한 의미를 지닙니다)


decay 가 발생했다고 해도 포인터 count 가 가리키고 있는 주소는 여전히 크기 26의 int 배열입니다.

따라서, (IsOnlyMax 에 항상 크기 26의 int 배열만 전달된다면) count[25] 같은 것을 안전하게 사용할 수 있습니다.

다만, 디버거 입장에서 count 변수의 decay 되어버린 타입만 볼 수 있기 때문에 숫자 하나만 보여줄 수 있습니다.

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