c - 使用指针在内存中迭代结构块
问题描述
再会,
我正在尝试使用 malloc 函数创建结构的动态列表。对于每个结构块,我想设置结构字段,然后我想遍历每个内存。下面是我写的代码:-#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int id;
int portnum;
int baudrate;
} port_t;
int main()
{
port_t *port_pt = (port_t *)malloc(sizeof(port_t) * 2); //allocate two blocks
port_pt->id = 1;
port_pt->portnum = 9;
port_pt->baudrate = 4800;
printf("id : %i, port :COM%i baud : %i\n\n", port_pt->id, port_pt->portnum, port_pt->baudrate);
port_pt++; //try make pointer point to next block
port_pt->id = 2;
port_pt->portnum = 9;
port_pt->baudrate = 4800;
port_pt--; //try to make pointer point to prev block
int count = 0;
while (port_pt != NULL)
{
printf("DEBUG id : %i, port :COM%i baud : %i\n", port_pt->id, port_pt->portnum, port_pt->baudrate);
port_pt++;
}
return 0;
}
但是,当我编译并运行此代码时。我得到这行输出而不是两行: -
解决方案
你所写的是一个数组(正如 Sri 提到的那样使用不正确),而不是一个链表。
要创建一个链表,您需要将指向您的结构的指针添加到您的结构(<- 不是语法错误!),但正如您当前的代码那样,这是不可能的。您还必须更改声明:
typedef struct
{
int id;
int portnum;
int baudrate;
} port_t;
至:
typedef struct port_t
{
struct port_t *next;
int id;
int portnum;
int baudrate;
} port_t;
struct tag
putstag
进入一个特殊的命名空间,该命名空间立即(甚至在开头之前{
),并且这个命名空间只能通过struct
(在 C 中访问。C++tag
也放入父命名空间,所以上面会给出一个重新声明错误,这就是为什么现代头文件倾向于使用typedef struct tag_s {...} tag_t;
)。
从那里,您将使用 malloc 分配单个元素块,将每个新块指针分配给next
前一个块中的字段,并将最终next
字段设置为NULL
(或 0)。当然,您会想要跟踪第一个块,并且还需要单独释放每个块。
推荐阅读
- javascript - 在对象数组中查找对象返回未定义
- html - 交替功能列表 css
- jquery - 我的激活菜单的 Jquery 函数不起作用
- php - PHPUnit 与 PHP 7.0 不兼容的版本
- java - 如何在 Spring 中将一些文本添加到所有控制器 URL
- multilingual - 带有数学/科学符号的多语言 LaTeX 文档
- python - 使用 Dash 向引导表中的单元格添加工具提示
- facebook-graph-api - FB Graph API:如何使用分页获取所有实体
- python - 将s3存储桶文件夹的地址添加到输出存储桶+ python
- java - AlertDialog 在第二次通话时不显示