programing

C에서 배열의 길이를 구하는 방법은 무엇입니까?"크기"가 해결책입니까?

telecom 2023. 7. 9. 09:48
반응형

C에서 배열의 길이를 구하는 방법은 무엇입니까?"크기"가 해결책입니까?

중복 가능성:
C 프로그래밍 언어의 배열 크기는?
C-Array가 함수로 전달될 때 C-Array의 크기() 값이 잘못된 이유는 무엇입니까?

아래 코드를 보고 제가 이렇게 사용했을 때 "sizeof" 키워드의 차이점이 무엇인지 제안해 주십시오.

#include<stdio.h>
#include<conio.h>
void show(int ar[]);
void main()
{
    int arr[]={1,2,3,4,5};
    clrscr();
    printf("Length: %d\n",sizeof(arr));
    printf("Length: %d\n",sizeof(arr)/sizeof(int));
    show(arr);
    getch();
}
void show(int ar[])
{
   printf("Length: %d", sizeof(ar));
   printf("Length: %d", sizeof(ar)/sizeof(int));
}

그러나 출력은 다음과 같습니다.

출력:

길이: 10

길이: 5

길이: 2

길이: 1

한 어레이에서 다른 어레이로 전체 데이터를 가져오려면 어떻게 해야 합니까?

아시는 분 있으면 추천해 주세요.

배열은 함수 호출의 포인터로 감쇠합니다.다음을 포함하여 포인터로만 표시되는 배열의 크기를 계산할 수 없습니다.sizeof.

명시적 인수를 추가해야 합니다.

void show(int *data, size_t count);

통화에서 다음을 사용할 수 있습니다.sizeof실제 어레이에 대한 요소 수 계산:

int arr[] = { 1,2,3,4,5 };

show(arr, sizeof arr / sizeof *arr);

참고:sizeof의 단위로 크기를 제공합니다.char그렇기 때문에 본질적으로 무엇에 의한 구분.sizeof (int)필요하지 않으면 너무 높은 가치를 얻을 수 있습니다.

또한, 관심과 청결의 관점으로서,sizeof함수가 아닙니다.괄호는 인수가 형식 이름일 때만 필요합니다. 인수는 캐스트와 같은 표현식이기 때문입니다(예:sizeof (int)) 당신은 종종 실제 유형을 이름을 짓지 않고도 도망칠 수 있습니다.sizeof대신 데이터로.

그렇기 때문에 배열을 사용하는 함수를 작성할 때 두 개의 매개 변수가 선언됩니다.하나는 배열에 대한 포인터이고 다른 하나는 배열의 크기를 정의합니다.

show()는 2바이트에 저장된 어레이의 주소를 가져옵니다.그것을 int *ar라고 생각하세요.

언급URL : https://stackoverflow.com/questions/9413046/how-to-get-the-length-of-an-array-in-c-is-sizeof-a-solution

반응형