数据结构typedef、&L和*L、Elemtype *elem和Elemtype elem[maxsize]

文章详细解释了typedef在C++中的作用,区分了elemtype与typedef的不同用途,讨论了函数返回值类型、参数传递中的&和*的区别,以及动态内存分配(malloc和free)在C++中的应用。
摘要由CSDN通过智能技术生成

关于typedef可以理解为定义数据类型结构的一个描述。elemtype也是一样,不过前者是定义存储结构,比如结构体,后者是定义数据类型,比如int这些(可以代指所有数据类型)。

在使用elemtype之前可以定义typedef int elemtype,也就是说elemtype是int类型。

①typedef int status,status是函数返回值类型,当返回值类型是函数结果状态码时(true  ,ok这些…),函数定义为status类型。

使用时status Test{};

②typedef int Getelem个人理解为把int类型改名为Getelem。只是改了名字本质还是int类型。

③typedef struct Book{};定义了一个结构体且结构体名字为Book。

另一种写法是typedef struct{}B;

——————————————

关于&L和*L

二者都是参数传递的两种方式,不同的是前者不需要占用新的空间,相当于给了一个新的名字,指向的还是用一个空间地址。而后者需要新的空间。

float a,b,*p1,*p2;

p1=&a;

p2=&b;   //p1,p2存的是a,b的地址

swap(p1,p2);//ab交换

int i=5;

int &j   //j是一个引用类型,代表i的一个替代名。当i改变时 ,j也跟着改变。i和用的是一个地址

 

——————————————

对于Elemtype *elem和Elemtype elem[maxsize]

前者是定义了一个数组elem(数组是特殊的指针),数组名表示的是这个数组的第一个元素,那么*elem存的是开辟的这块空间的基地址。这是动态分配空间的方法。后者是静态开辟空间的方法。03bcef303d99419caa0e2685892f496c.jpg

这里的*elem是一个polynomial类型的数组,也就是指向上边polynomial结构体的指针。

这个polynomial结构体有两部分,一个系数一个指数,是多项式中某一项(pi,ei)的表示,这个*elem中就是存的就是这个多项式各个项的顺序存储结构。也可以理解为一个个的polynomial结构体通过指针塞到了数组中且每一个结构体有两项(数组长度由后边的length决定)。可以用elem[i]方式访问其中的元素。

6c34325367394c70989b7078f6092614.jpg

简单理解就是第一个polynomial结构体定义了一种数据元素,有两个部分,后边sqlist把这些polynomial结构体构建成一个线性表,*elem存的是这个表的首地址(数组直接存的是具体的数据,前边加*就表示这个数组的元素的地址),length是这个表的长度。访问表中元素时采用elem[i]的方式。

 ———————————————

动态分配内存方法补充

sqlist L

L.elem=(elemtype*)malloc(sizeof(elemtype)*maxsize)

malloc(m)表示开辟m字节长度的地址空间并返回这段空间的首地址。

(elemtype)*maxsize)表示这种数据类型的字节长度✖️元素个数,就是需要开辟的空间大小。也就是从内存找到这么多的空间。

而(elemtype*)表示强制转换。开辟了这么多的空间怎么划分?就是通过(elemtype*)处理,比如我们需要int型,那就是把这么多的空间转换为int类型。

为什么elemtype后边有*,是因为我们在sqlist结构体中定义的数组是*elem的指针类型的数组,所以我们要转为指针类型。(结构体中只定义了*elem,并未给实际的地址,这里开辟了实际的空间才算赋给了*elem地址)。

free()表示释放指针p所指变量的存储空间,彻底删除一个变量。(但是只能删除空间,不能删除指针,所以要置指针为null)。

 

————————————————

c++动态分配内存

int *p1=new int或者int *p1=new int[10]

等号后边表示从内存中开辟了一块空间,得到的是地址,所以要给一个指针类型的变量,指向新开辟的空间的地址。

————————————————

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值