구조체 선언

"구조체 선언" 형식 이름을 지정 하 고 다른 형식을 가질 수 있는 변수 ("구성원" 또는 "필드"의 구조 라고도 함) 값 시퀀스를 지정 합니다."태그" 이라는 옵션 식별자, 구조 형식 이름을 제공 및 구조 형식에 대 한 후속 참조를 사용할 수 있습니다.변수를 해당 구조체 형식에 해당 형식으로 정의 된 전체 시퀀스가 들어 있습니다.다른 언어에서 "레코드"로 알려진 형식 C에서 구조 유사 합니다.

구문

  • 구조체 또는 공용 구조체 지정자:
    구조체 또는 공용 구조체에 식별자 선택**{** 구조체 선언의 목록 }

    구조체 또는 공용 구조체 식별자

  • 구조체 또는 공용 구조체:
    struct

    union

  • 구조체 선언의 목록:
    구조체 선언

    구조체 선언의 목록 구조체 선언

콘텐츠 구조를 말합니다.

  • 구조체 선언:
    지정자 한정자 목록 구조체 선언 자 목록 ;

  • 지정자 한정자 목록:
    형식 지정자 지정자 한정자 목록 선택

    형식 한정자가 지정 자가 한정자 목록 선택

  • 구조체 선언 자 목록:
    구조체를 선언 자

    구조체 선언 자 목록 , 구조체를 선언 자

  • 구조체를 선언 자:
    declarator

구조체 형식의 선언 구조체를 위한 공간을 따로 설정 하지 않습니다.그 이후 구조 변수 선언에 대 한 서식 파일입니다.

이전에 정의 된 A 식별자 (태그)을 사용 하 여 다른 곳에 정의 된 구조체 형식을 참조할 수 있습니다.이 경우 구조체 선언의 목록 정의 보임으로 반복할 수 없습니다.구조체 형식 정의 되기 전에 구조 및 구조 형식에 대 한 형식 정의에 대 한 포인터의 선언 구조 태그를 사용할 수 있습니다.그러나 구조 정의 실제 크기의 필드를 사용 하기 전에 발생 합니다.이 불완전 한 정의 유형과 형식 태그입니다.이 정의 완료 하는 형식 정의 같은 범위에서 나중에 표시 되어야 합니다.

해당 구조체 선언의 목록 형식 및 구조체 멤버의 이름을 지정 합니다.A 구조체 선언의 목록 인수 변수 또는 비트 필드 선언이 포함 되어 있습니다.

선언 된 각 변수 구조체 선언의 목록 구조체 형식 멤버로 정의 됩니다.변수 선언 내에서 구조체 선언의 목록 선언은 이니셜라이저 또는 저장소 클래스 지정자를 사용할 수 없습니다 것을 제외 하 고이 섹션에서 설명 하는 다른 변수 선언으로 같은 폼에 있습니다.구조체 멤버 형식 제외한 모든 변수 유형에 사용할 수 있습니다 void, 형식 또는 함수 형식입니다.

구성원 형식을 나타나는 구조를 갖도록 선언할 수 없습니다.그러나 태그는 구조체 형식을 포함 한 그대로 나타나는 구조체 형식에 대 한 포인터와 멤버를 선언할 수 있습니다.연결된 리스트 구조를 만들 수 있습니다.

다른 식별자와 같은 범위 지정 구조를 따릅니다.구조 식별자 구분 다른 구조체, 공용 구조체 및 열거형 태그와 동일 하 게 표시 해야 합니다.

구조체 선언 에 있는 구조체 선언의 목록 목록 내에서 고유 해야 합니다.그러나 식별자 이름을 지정에 구조체 선언의 목록 일반 변수 이름 또는 식별자에 다른 구조체 선언 목록에서 고유 하지 않아도 됩니다.

중첩 된 구조체는 파일 범위 수준에서 선언 된 것 처럼에 액세스할 수 있습니다.예를 들어,이 선언 된:

struct a
{
    int x;
    struct b
    {
      int y;
    } var2;
} var1;

이 선언을 모두 법적 있습니다.

struct a var3;
struct b var4;

예제

이러한 예는 구조체 선언을 보여 줍니다.

struct employee   /* Defines a structure variable named temp */
{
    char name[20];
    int id;
    long class;
} temp;

The employee structure has three members: name, id, and class.name 구성원 인 20 요소 배열에 및 id 및 class 간단한 구성원과 되 int 및 각각 입력 합니다.식별자 employee 구조 식별자입니다.

struct employee student, faculty, staff;

세 개의 구조체 변수를 정의 하는이 예제: student, faculty, 및 staff.각 구조는 같은 세 멤버가 있습니다.멤버 구조체 형식을 갖도록 선언 된 employee, 앞의 예제에서 정의 합니다.

struct           /* Defines an anonymous struct and a */
{                /* structure variable named complex  */
    float x, y;
} complex;

complex 구조를 가진 구성원을 갖는 부동 소수점 형식 x 및 y.구조체 형식 태그 없음 있으며 따라서 명명 되지 않은 또는 익명입니다.

struct sample   /* Defines a structure named x */
{
    char c;
    float *pf;
    struct sample *next;
} x;

구조를 처음 두 명의 구성원 인는 char 변수 및 포인터는 float 값입니다.세 번째 멤버 next에서 정의 되는 구조 형식에 대 한 포인터 선언 됩니다 (sample).

익명 구조체 라는 태그가 필요 하지 않을 때 유용 합니다.하나의 선언 구조를 모두 정의 하는 경우이 경우입니다.예를 들면 다음과 같습니다.

struct
{
    int x;
    int y;
} mystruct;

포함 된 구조체는 익명입니다.

struct somestruct
{
    struct    /* Anonymous structure */
    {
        int x, y;
    } point;
    int type;
} w;

Microsoft 전용

컴파일러 크기가 지정 되지 않은 또는 크기가 0 인 배열이 구조체의 마지막 멤버로 허용 합니다.다양 한 상황에서 사용 하는 경우 상수 배열 크기가 다를 경우 유용 합니다.이러한 구조는 다음과 같습니다.

struct 식별자**{**    선언에 세트    입력 배열 이름**;};**

배열 크기가 지정 되지 않은 구조체의 마지막 멤버로 사용할 수 있습니다.더 이상의 구성원이 모든 바깥쪽 구조체에 선언 된 수와 다른 구조가 크기 배열 선언을 포함 하는 구조를 중첩할 수 있습니다.이러한 구조의 배열은 사용할 수 없습니다.sizeof 연산자를 형식 자체에이 형식의 변수를 적용할 때 배열 크기는 0 가정 합니다.

다른 구조체나 공용 구조체의 멤버가 있으면 구조체 선언의 선언 자 없이 지정할 수 있습니다.필드 이름은 바깥쪽 구조에 올라갑니다.예를 들어, 이름이 없는 구조는 다음과 같습니다.

struct s
{
    float y;
    struct
    {
        int a, b, c;
    };
    char str[10];
} *p_s;
.
.
.
p_s->b = 100;  /* A reference to a field in the s structure */

참조 하십시오 구조체 및 공용 구조체 멤버 구조 참조에 대 한 정보입니다.

Microsoft 특정 끝

참고 항목

개념

변수를 선언 하 고 선언 자