c언어 sizeof연산을 이용하여 배열의 길이 계산하는 함수 문제점

조회수 1335회

안녕하세요 c언어를 공부중인 학생입니다.

배열의 정수를 내림차순으로 정렬하는 함수 만드는 문제를 푸는 도중 main함수 이외의 함수에서 배열의 길이를 구하면 1으로 값이 고정되어 나옵니다

언젠가 sizeof연산자로 배열의 길이를 구하는 것이 다른 함수에선 안된다고 들은적이 있는 것 같아서 책을 다 뒤져보았지만 그 내용이 보이지 않네요 또 고민하고 검색해 보아도 정확하게 알 수가 없어 질문드립니다

아래는 값이 1 이 나온다는 배열의 길이 구하는 함수와 실행하는 메인함수입니다.

void arrlen(int arr[])

{

int len = sizeof(arr) / sizeof(int);
printf("%d", len);

}

int main(void)

{

int arr[10];
arrlen(arr);
return 0;

}

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 기본적으로 함수 원형에서 매개변수를 int arr[] 이런식으로 선언하면 int* 타입으로 취급하게 됩니다.

    int* 자료형의 메모리 크기는 배열의 크기와 상관없이 항상 4Bytes 로 나오기 때문에 같은 크기의 int 자료형의 크기로 나누면 1이 나올 수 밖에 없습니다.

    아래 링크를 참고해주시면 도움이 되실 것 같습니다. https://dojang.io/mod/page/view.php?id=562

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)