source

C의 구조 배열에서 'size of'의 결과는?

manysource 2023. 9. 2. 08:36

C의 구조 배열에서 'size of'의 결과는?

C에서, 나는 다음과 같이 정의된 구조들의 배열을 가지고 있습니다:

struct D
{
    char *a;
    char *b;
    char *c;
};

static struct D a[] = {
    {
        "1a",
        "1b",
        "1c"
    },
    {
        "2a",
        "2b",
        "2c"
    }
};

배열의 요소 수를 결정하고 싶지만,sizeof(a)잘못된 결과를 반환합니다. 2가 아니라 48입니다.내가 뭔가 잘못하고 있는 것일까요, 아니면sizeof여기서 단순히 믿을 수 없는가요?문제가 된다면 GCC 4.4로 컴파일하겠습니다.

sizeof크기는 요소 수가 아니라 바이트 단위로 제공됩니다.알록이 말했듯이, 요소의 수를 얻으려면 배열의 크기(바이트)를 한 요소의 크기(바이트)로 나눕니다.올바른 관용구는 다음과 같습니다.

sizeof a / sizeof a[0]
sizeof a / sizeof a[0];

이것은 컴파일 시간 상수이므로, 예를 들어 다른 배열을 만드는 데 사용할 수 있습니다.

#define N sizeof a / sizeof a[0]
int n_a[N];

sizeof전달된 요소의 메모리 크기를 반환합니다.배열의 크기를 단일 요소 크기로 나누면 요소 개수를 얻을 수 있습니다.

요소 크기에는 일부 패딩 바이트도 포함될 수 있습니다.이러한 이유로, 패딩된 구조물(예: 문자 구성원 뒤에 포인터가 있을 때)은sizeof멤버 크기 합계보다 큰 값입니다.

반면에 배열에서 요소를 셀 때는 다음과 같은 문제가 발생하지 않도록 하십시오.sizeof(a) / sizeof(a[0])여전히 예상대로 원활하게 작동할 것입니다.

ssize_t portfoy Sayisi = size of (*portfoyler);

효과가 있습니다.

언급URL : https://stackoverflow.com/questions/1898657/result-of-sizeof-on-array-of-structs-in-c