[英]Dynamic memory allocation of struct in c
代码:
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];
我如何编写必要的代码来动态分配内存来存储 pFriend[2]->FullName->Name.First 中的值?
假设您知道要存储的名字的长度,
// 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);
你的pFriend是一个指针变量,所以你必须先为指针变量分配内存。 然后再次分配内存后,您的FullName是指针类型,因此我们需要为其分配内存,最后,您在FullName 中的Name成员不是指针类型,因此您可以使用First from Name和. 运算符为其分配内存。
//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));
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];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.