2013-03-25 1 views
5

나는 전에 본 적이없는 문법으로 C 구조체를보고있다. 구조는 다음과 같습니다``*`는``typedef struct` 선언에서 무엇을 의미합니까?

typedef struct structExample { 
    int member1; 
    int member2 
} structNAME; 

내가 두 번째 구조체 정의의 멤버를 참조 할 수에 의해 말 :

typedef struct structExample { 
    int member1; 
    int member2 
} * structNAME; 

나는 보통의 구조는 것을 알고

structNAME* tempStruct = malloc(sizeof(structNAME)); 
// (intitialize members) 
tempstruct->member1; 

첫 번째 구조체 정의에서 그 여분의 *은 무엇을합니까? 그리고 어떻게 첫 번째 구조체 정의의 멤버를 참조합니까?

+3

내 눈 사이에 총이 없다면 결코 이런 짓을하지 않을 것입니다. –

+1

C 책의 가능한 복제본 –

답변

4

정의 된 유형이 포인터 유형임을 의미합니다.

struct structExample { 
    int member1; 
    int member2; 
}; 
typedef struct structExample * structNAME; 

당신은 이것을 다음과 같이 사용할 수있다 :이 유형 선언하는 동등한 방법입니다이 경우

structNAME mystruct = malloc (sizeof (struct structExample)); 
mystruct->member1 = 42; 
+5

두 번째 예는 초기화되지 않은 포인터를 역 참조합니다. – interjay

+1

자유롭게 malloc을 생략하고 있지 않습니까? – Oliver

+0

당신은 확실히 이런 식으로 사용하지 않을 것입니다. – UmNyobe

1

structNAMEstruct structExample에 대한 포인터로 정의됩니다. 그래서 당신은 내가 때문에,이 코딩 스타일을 싫어 typedef입니다이 두 문장 그것은 의견으로 struct structExample

에 대한 포인터에 대한 structName 스탠드를 만들어 같은

struct structExample *myStruct; 
structName myStruct; 

하게

structNAME tempStructPtr = malloc(sizeOf(struct structExample)); 
tempStructPtr->member1 = 2; 
2

을 수행 할 수 있습니다 변수가 포인터인지 아닌지를 아는 것이 더 어렵습니다. 그것은 당신이 struct structExample에 대한 포인터가있는 힌트를주고

typedef struct structExample * structExampleRef; 

이있는 경우 도움이;

0

을 (* structNAME)는 그 구조의 포인터 변수는 ...입니다

1

이것들을 이해하는 비법은 을 어떤 선언 앞에 붙이면 TYPENAME VARIABLENAMEtypedef TYPENAME ALIASEDNAME이 될 수 있다는 것입니다.

별표는 일반 선언 인 경우 VARIABLENAME 파트의 일부가 아니므로 해당 유형의 일부 여야합니다. 유형 이름 다음의 별표는 이전 유형에 대한 "포인터"를 의미합니다.

이 비교 :

typedef int * my_int_pointer; 

그것은 귀하의 케이스 대신 int 당신이 struct를 선언하고 제외 정확히 동일합니다.

관련 문제