>백엔드 개발 >C++ >C 구조체에서 길이가 0인 배열을 사용하는 이유는 무엇입니까?

C 구조체에서 길이가 0인 배열을 사용하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-11 10:05:15584검색

Why Use Zero-Length Arrays in C Structs?

길이가 0인 배열

오래된 코드를 리팩토링하면 구조체에서 길이가 0인 배열을 사용하는 것과 같은 의심스러운 사례를 발견할 수 있습니다. 이는 요소가 없는 배열을 만드는 이유는 무엇입니까?

다음 구조체를 고려하십시오.

struct someData
{
   int nData;
   BYTE byData[0];
}

byData에서 볼 수 있듯이 길이가 0인 배열은 특이한 선택입니다. 일반적으로 배열은 요소를 저장합니다. 그러나 길이가 0인 배열은 포인터로 사용될 수 있습니다. 이 경우 byData는 나중에 동적으로 할당될 가변 길이 버퍼에 대한 자리 표시자 역할을 합니다.

struct someData* mallocSomeData(int size)
{
    struct someData*  result = (struct someData*)malloc(sizeof(struct someData) + size * sizeof(BYTE));
    if (result)
    {    result->nData = size;
    }
    return result;
}

이 함수는 someData 구조체에 대한 메모리와 지정된 길이의 버퍼를 할당합니다. 구조체의 길이가 0인 배열을 사용하면 동적으로 할당된 버퍼를 참조하여 이를 포인터로 처리할 수 있습니다.

이 코드를 리팩토링하려면 다음 사용을 고려하세요.

  • 포인터 : 길이가 0인 배열을 버퍼에 대한 직접 포인터로 바꾸고 버퍼를 할당합니다. 별도로.
  • 길이가 1인 배열: 길이가 1인 배열을 만들고 첫 번째 요소를 버퍼에 대한 포인터로 사용합니다.

위 내용은 C 구조체에서 길이가 0인 배열을 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.