programing

왜 우리는 일부 구조 변수를 괄호 안에 넣지 않습니까?

projobs 2023. 6. 23. 23:48
반응형

왜 우리는 일부 구조 변수를 괄호 안에 넣지 않습니까?

나는 이해하려고 노력 중입니다.structC. 아래의 이 정의에 대한 아이디어를 얻을 수 없었습니다.왜 떠나는 거지?aCard,deck[ ]그리고.*cardPtr아웃? 아웃이랑 아웃이랑 뭐가 달라요?

 struct card {
    char *face;
    char *suit;
 } aCard, deck[52], *cardPtr;

당신은 일을 혼동하고 있습니다.astruct card멤버들이 있습니다.face그리고.suit하지만 다음을 사용하는 세 가지 변수가 있습니다.struct card유형, 즉aCard, deck, cardPtr.

또는 다음과 같이 적을 수 있습니다.

typedef struct {
    char *face;
    char *suit;
} Card;

Card aCard, deck[52], *cardPtr;
// or even
Card aCard;
Card deck[52];
Card *cardPtr;

를 위해typedef다음 항목을(를 참조하십시오.왜 우리는 C에서 default를 그렇게 자주 입력해야 합니까? (그것은 다음과 같습니다.typedef struct { ... } Foo;struct Foo {...}토론)

코드는 다음과 같이 작성하여 더 명확하게 할 수 있습니다.

struct card {          // define the struct card
    char *face;
    char *suit;
 };

struct card aCard;     // declare a variable "aCard" of type "struct card "
struct card deck[52]   // declare an array of 52 variables of type "struct card"
struct card *cardPtr;  // declare a variable "cardPtr" of type "pointer to struct card"

이 질문은 이미 답변이 되었으나 OP가 구조물 선언과 구조물 유형의 변수 정의에 의문이 있다고 생각하여 답변을 올립니다.

만약 당신이 C의 구조가 무엇인지 모른다면 아래를 보세요.

키워드 구조체는 중괄호로 묶인 선언 목록인 구조체 선언을 소개합니다.구조 태그라는 선택적 이름은 구조체라는 단어 뒤에 올 수 있습니다.따라서 구조 선언은 다음과 같습니다.

struct card {
    char *face;
    char *suit;
 };

여기서face그리고.suit멤버 변수입니다.구조 선언은 저장소를 예약하지 않으며 구조의 템플릿만 설명합니다.

구조체 선언은 형식을 정의합니다.구성원 목록을 끝내는 오른쪽 대괄호 뒤에 변수 목록이 올 수 있습니다.그래서, 당신의 경우:

....
} aCard, deck[52], *cardPtr;

aCard,deck[52]그리고.*cardPtr유형의 변수입니다. struct card.

구조 선언에 이름이 태그되어 있으므로card꼬리표card나중에 구조의 인스턴스 정의에 사용될 수 있습니다. 예를 들어 구조의 선언이 주어졌을 때card위에,

struct card someCard;

변수를 정의합니다.someCard유형의 구조입니다.struct card.

또는 다음과 같은 작업을 수행할 수 있습니다.typedef구조체 선언을 사용하여 해당 유형의 변수를 정의할 수 있습니다.


1)

정의에 따라 - 구조는 하나 이상의 변수(유형이 다를 수 있음)의 집합으로, 단일 이름으로 그룹화됩니다.

C 표준 #6.2.5 [유형]에 따름:

구조체 유형은 순차적으로 할당된 비어 있지 않은 멤버 개체 집합(및 특정 상황에서는 불완전한 배열)을 설명합니다. 각 개체는 선택적으로 지정된 이름과 고유한 유형을 가질 수 있습니다.

.....
.....
산술 유형 및 포인터 유형을 총칭하여 스칼라 유형이라고 합니다.배열 및 구조물 유형을 집합적으로 집계 유형이라고 합니다.46)

A

struct card {
    char *face;
    char *suit;
 }

와꼭과 같습니다.int 그것은 정의이고, 그리고 ,며,

aCard, deck[52], *cardPtr;

변수 이름입니다. 예를 들어,

int aCard, deck[41], *cardPtr;

세 가지 변수를 선언했습니다. aCard이 형의입니다.struct card,deck이 형의입니다.struct card[52]그리고.cardPtr이 형의입니다.struct card *

aCard그리고 당신이 언급한 나머지는 유형의 변수입니다.struct card 이 그고이변각은다포다니함합음을각들리수▁contain를 포함합니다.char *face그리고.char *suit그래서 어떻게 어떤 변수가 그 자체를 포함할 수 있습니까? aCard구조 노드 내부에 있습니다.

언급URL : https://stackoverflow.com/questions/52851455/why-do-we-leave-some-structure-variables-out-of-the-curly-brackets

반응형