2014-04-04 40 views
-1

代碼:動態存儲器分配Ç

struct T_Name 
{ 
    char *First; 
    char *Middle; 
    char *Last; 
}; 

struct T_FullName 
{ 
    char *Title; 
    struct T_Name Name; 
    char *Suffix; 
}; 

struct T_Person 
{ 
    struct T_FullName *FullName; 
    int Age; 
    char Sex; 
    struct T_Person *BestFriend; 
}; 

typedef struct T_Person *ptrPerson; 

ptrPerson pFriend[10]; 

struct T_Person Person[10]; 

如何可以寫necesarry代碼動態地分配存儲器來存儲在pFriend [2]的值 - > FullName-> Name.First?

回答

0

假設你知道名字的存儲長度,

// Allocate memory for FullName. 
Person[2].FullName = malloc(sizeof(T_FullName); 

// Allocate memory for the first name. 
Person[2].FullName->Name.First = malloc(FIRSTNAME_LENGTH); 
0

pFriend是一個指針變量,所以你必須先分配的指針變量的內存。那麼內存的分配後,再次你全名是指針類型,所以我們需要爲它分配內存,最後你名稱成員全名不是指針類型,所以你可以從名稱使用首先運營商爲其分配內存。

//Allocate space for T_Person 
pFriend[2] = malloc(sizeof(T_Person); 
//Allocate space for FullName 
pFriend[2]->FullName = malloc(sizeof(T_FullName); 
//Allocate space for First Name 
pFriend[2]->FullName->Name.First = malloc(sizeof(urstringlength)); 
+0

中間一個 - T_FullName :: Name不是一個指針 – guest

0
pFriend[2] = malloc(sizeof *pFriend[2]); 
pFriend[2]->FullName = malloc(sizeof *pFriend[2]->FullName); 
pFriend[2]->FullName->First = malloc(strlen(the_name) + 1); 
strcpy(pFriend[2]->FullName->First, the_name); 

請注意,你可能並不真的想做到這一點,就很難使用結構這個混亂。您至少應該將未使用的指針設置爲NULL,以便您的其他代碼可以指出哪些指針指向分配的內存,哪些指針不指向內存。

另外,在本例中Person未使用。如果你想pFriend[i]指向Person[i]你必須說明確;替換我的第一行:

pFriend[2] = &Person[2];