2017-10-02 4 views
-2
typedef struct student{   
char *fName;   
char *lName;   
int pid; 
}student; 

vs 

typedef struct student{   
char fName;   
char lName;   
int pid; 
}student; 

이 두 구조체의 사용법은 어떻게 다릅니 까? 왜 내가 다른 것을 사용 하느냐?구조체 간의 차이점

+3

을 두 번째 잘못 사용하여 메모리 할당 후 문자열을 저장할 수 있습니다! – noelicus

+0

그리고 malloc과 무슨 상관이 있습니까? 더 도움이 될 수 있습니다 - 첫 번째는 이름에 대한 문자열을 가리킬 수 있지만 두 번째는 이름 당 하나의 문자 만 보유합니다. 너무 유용하지는 않습니다. – noelicus

+1

'char'는 하나의 문자입니다. 'char *'는 일반적으로 동적으로 할당 된 배열이 될 문자에 대한 포인터입니다. – Barmar

답변

4

제 구조체 (단일 문자를 나타내는 데 사용될 수 있음)의 문자 어레이로 저장 일반적이다 fNamelName의 문자 포인터를 보유하고있다.

두 번째는 단순히 이름 그것은 아주 간단

+0

대충 옳은 것은 처음 구조체의'fName'과'lName'은 각각 하나의 문자를 가리킬 수 있기 때문에 반드시 배열을 가리키는 것은 아닙니다. 그들은 문자 배열을 가리킬 수 있습니다 (그리고 대부분 컨텍스트를 기반으로합니다). –

+0

좋은 지적, 편집 됨. –

0

에게 학생들에게 입력 할 수있는 의미 하나 char를 저장합니다. 은 string을 가리킬 수있는 포인터이고 character은 하나만 저장할 수있는 반면 char fname은 한 문자 만 저장할 수 있습니다.

전체 이름을 저장하려면 첫 번째 유형의 구조를 사용해야하며 사람의 전체 이름의 머리 글자 만 저장하려면 두 번째 구조로 이동해야합니다.

참고 : char *fnamemalloc() 또는 calloc()