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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于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]

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

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

 

### C语言中 `ElemType` 的定义使用 #### 定义 在C语言编程中,`ElemType` 是一个通用术语,用于表示任意数据类型。为了提高代码的可读性灵活性,通常会使用预处理器指令或 `typedef` 关键字来定义 `ElemType` 表示特定的数据类型[^1]。 例如: ```c // 使用 typedef 定义 ElemType 为 int 类型 typedef int ElemType; ``` 这样做的好处是可以方便地更改底层数据类型而不需要修改大量现有代码。如果希望将 `ElemType` 更改为其他类型(如 `float`, `double` 或者自定义结构体),只需改变上述声明即可[^2]。 #### 使用场景 当构建复杂的数据结构时,比如顺序表、栈、队列等,可以利用 `ElemType` 实现数据类型的抽象化处理。这不仅提高了程序设计的一般性,还增强了维护便利度。下面是一个简单的例子展示如何基于 `ElemType` 创建并初始化一个顺序表[^4]。 ```c #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100 // 设定最大容量 typedef int ElemType; typedef struct { ElemType *data; // 存储实际元素的动态数组 size_t length; // 当前长度 } SeqList; SeqList* create_seq_list() { SeqList *list = (SeqList *)malloc(sizeof(SeqList)); list->length = 0; list->data = (ElemType*)calloc(MAX_SIZE, sizeof(ElemType)); // 动态分配内存给顺序表 return list; } void destroy_seq_list(SeqList **ptr_to_list) { free((*ptr_to_list)->data); free(*ptr_to_list); (*ptr_to_list) = NULL; } ``` 在这个案例里,通过设置 `ElemType` 作为顺序表内元素的基础类型,在创建顺序表实例之前已经完成了对其所需空间大小的确立工作。因此,无论将来决定用什么具体类型替换当前设定下的 `int` ,都无需担心影响到整个系统的正常运作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值