malloc 与结构以及如何访问结构的 malloc 的内存

Posted

技术标签:

【中文标题】malloc 与结构以及如何访问结构的 malloc 的内存【英文标题】:malloc with structs and how to access memory of malloc of struct 【发布时间】:2020-12-14 18:14:14 【问题描述】:

如果我有一个简单的结构,例如 我将如何使用 malloc 为这个结构动态分配内存?

struct Dimensions
int height, width;
char name;
;

我不确定该怎么做,我已经尝试过

struct Dimension* dim = malloc(sizeof(struct Dimensions));

我还想稍后在我的代码中循环访问高度和宽度变量。我的第一个想法是使用指针,但我不确定这到底是什么。

会不会是这样的

int h = *width

我对 C 很陌生。谢谢

【问题讨论】:

dim->height, dim->widthdim->name -- dim 是一个指针,因此您可以使用 -> 运算符来引用成员。如果dim 不是指针,而是struct Dimension 类型的声明本身,那么您将使用. 运算符来访问成员。 假设char name 包含多个字符,您最好将其定义更改为char *name(指针,指向字符集合,动态调整大小)或char name[20](数组固定大小的字符)。 【参考方案1】:

您动态分配该结构的方式是正确的:

struct Dimension* dim = malloc(sizeof(struct Dimensions));

我还想稍后在我的代码中循环访问高度和宽度变量。

您应该首先为 dim 分配一些值,例如:

dim->high = 1;
dim->width = 2;

您刚刚使用的name 成员char 可能不是您需要的。通常它是一个字符串:char name[100];。但是你不能对那个字符串使用赋值,所以使用strcpy

然后您可以稍后访问:

int h = dim->high;

记住,一旦你完成了动态分配的内存,你应该free它:

free(dim);
return 0;

【讨论】:

以上是关于malloc 与结构以及如何访问结构的 malloc 的内存的主要内容,如果未能解决你的问题,请参考以下文章

C语言,怎么为动态结构体数组分配内存

Malloc 与创建数据结构

结构体数组与用malloc申请结构体空间的对比

malloc如何从堆中获取内存?

结构中的数组和结构的 Malloc

malloc() 和 realloc() 结构