请问包含结构指针的结构体怎么初始化?

snoopy84 2008-03-24 11:41:54
struct Base
{
int a;
int b;
int c;
};

struct Derived
{
int d;
int e;
int f;
base *pb;
};

derived *CreateDerived (void){}
void FreeDerived (derived *pd){}
要求完成这两个函数,并可以使用如下的语句,
Derived *p = CreateDerived();
p->pb->a = 10;
...全文
512 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
laolaoliu2002 2008-03-24
  • 打赏
  • 举报
回复
5楼写的很标准
ryfdizuo 2008-03-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 akirya 的回复:]
C/C++ code


Derived * CreateDerived()
{
Derived *p = (Derived *)malloc( sizeof(Derived) );
p->pb = (Base*)malloc(sizeof(Base));
return p;
}

void FreeDerived(Derived *p)
{
free( p->pb);
free(p);
}
[/Quote]
太乙 2008-03-24
  • 打赏
  • 举报
回复


Derived *CreateDerived (void)
{
return malloc(sizeof(struct Derived));

}
void FreeDerived (Derived *pd)
{
if(pd==null)return;
if(pd->pb!=null)free(pd->pb);
free(pd);
}

Supper_Jerry 2008-03-24
  • 打赏
  • 举报
回复
#include  <iostream> 
using namespace std;
struct Base
{
int a;
int b;
int c;
};

struct Derived
{
int d;
int e;
int f;
Base *pb;
};
Derived *CreateDerived (void)
{
Derived* pD = (Derived*)malloc(sizeof(Derived));
if(pD)
{
pD->pb = (Base*)malloc(sizeof(Base));
return pD;
}
return NULL;
}
void FreeDerived (Derived *pd)
{
if(pd)
{
if(pd->pb)
{
free(pd->pb);
pd->pb = NULL;
}
free(pd);
pd = NULL;
}
}

int main(int argc, char* argv[])
{
Derived *p = CreateDerived();
p->pb->a = 10;
FreeDerived(p);
return 0;
}
使用malloc free
  • 打赏
  • 举报
回复



Derived * CreateDerived()
{
Derived *p = (Derived *)malloc( sizeof(Derived) );
p->pb = (Base*)malloc(sizeof(Base));
return p;
}

void FreeDerived(Derived *p)
{
free( p->pb);
free(p);
}

Supper_Jerry 2008-03-24
  • 打赏
  • 举报
回复
#include  <iostream> 
using namespace std;
struct Base
{
int a;
int b;
int c;
};

struct Derived
{
int d;
int e;
int f;
Base *pb;
};
Derived *CreateDerived (void)
{
Derived* pD = new Derived;
if(pD)
{
pD->pb = new Base;
return pD;
}
return NULL;
}
void FreeDerived (Derived *pd)
{
if(pd)
{
if(pd->pb)
{
delete pd->pb;
pd->pb = NULL;
}
delete pd;
pd = NULL;
}
}

int main(int argc, char* argv[])
{
Derived *p = CreateDerived();
p->pb->a = 10;
FreeDerived(p);
return 0;
}
  • 打赏
  • 举报
回复

Derived * CreateDerived()
{
Derived *p = new Derived;
p->pb = new Base;
return p;
}

void FreeDerived(Derived *p)
{
delete p->pb;
delete p;
}
snoopy84 2008-03-24
  • 打赏
  • 举报
回复
要求用malloc
snoopy84 2008-03-24
  • 打赏
  • 举报
回复
不好意思,各位大侠都应当给分的,下次下次,请别见怪,第一次问问题,呵呵
「已注销」 2008-03-24
  • 打赏
  • 举报
回复
在C++中,struct被当成class来编译的,所以也可以写成下面这样,增加构造函数和析构函数:

#include <iostream>
using namespace std;
struct Base
{
int a;
int b;
int c;
};

struct Derived
{
int d;
int e;
int f;
Base *pb;
Derived(){
pb = new Base;
}
~Derived(){
delete pb;
}
};

int main(int argc, char* argv[])
{
Derived *p = new Derived();
p->pb->a = 10;
delete p;
return 0;
}

snoopy84 2008-03-24
  • 打赏
  • 举报
回复
谢谢各位大侠,我结贴了
资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 在C语言中,结构是一种复合数据类型,它能够将不同类型的多个数据组合成一个统一的整体。结构通常被用于表示较为复杂的数据结构,例如学生信息、员工记录等。指针是C语言中一种特殊的变量,它存储的是其他变量的地址,通过指针可以间接访问和修改被指向的变量。 定义结构时,需要使用struct关键字,后面紧跟结构的名称以及其成员。例如,以下代码定义了一个结构stu,它包含了学生的姓名(字符串指针)、学号(整型)、年龄(整型)、所在小组(字符)和成绩(浮点型): 我们可以创建结构变量并初始化其成员。例如: 指针可以指向结构变量。定义结构指针的方式如下: 然后可以将结构变量的地址赋值给指针,如下: 需要注意的是,不能直接写pstu = stu1,因为stu1是结构变量本身,而不是地址。结构变量名不会像数组名那样在表达式中自动转换为指针,因此必须使用&运算符来获取其地址。 访问结构成员有两种方式:一是通过解引用操作*和成员访问运算符.,例如(*pointer).memberName;二是使用结构指针的箭头运算符->,例如pointer->memberName。这两种方式是等价的,但箭头运算符使代码更易读。例如: 结构数组是结构的数组形式,可以同时存储多个结构变量。例如: 结构数组的指针可以用来遍历整个数组。例如: 以上就是C语言中关于结构指针的基本概念及其用法的介绍,包括结构的定义、初始化指针的声明、赋值,以及如何通过指针访问结构成员。熟练掌握这些知识对于编写复杂的C程序非常重要。

65,198

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧