我正在使用一个结构,我想初始化最多 10 个端口。但是,当程序运行时,它可能会少很多,直到运行时我们才知道。但是,这将是最大值。我以前从未做过这样的 struct ,因为我通常使用 calloc 和 delcare 动态分配 *ports 作为值类型。
但是,我无法理解这一点
*ports[MAX_PORTS]. Am I creating 10 pointers that point to port objects?
和
*ports = (struct port_t*) calloc(2, sizeof(*ports));
看起来我正在分配一个指向自由存储上分配的 2 个端口对象的单个指针?
我不明白为什么我将点运算符与箭头运算符一起使用?端口[0]->port_id = 20;printf("port_id: %d\n", 端口[0]->port_id);
#include <stdio.h>
#include <stdlib.h>
#define MAX_PORTS 10
struct port_t
{
int port_id;
char name;
} *ports[MAX_PORTS];
int main(void)
{
*ports = (struct port_t*) calloc(2, sizeof(*ports));
ports[0]->port_id = 20;
printf("port_id: %d\n", ports[0]->port_id);
return 0;
}
通常,我在传递中所做的是:
struct port_t
{
int port_id;
char name;
} *ports;
ports = (struct port_t*) calloc(2, sizeof(*ports));
然后使用以下任一项进行分配。但是,之前的程序员已经声明了我在顶部显示的所有内容,因此我无法更改任何内容。
ports[0].port_id = 10;
ports->port_id = 10;
非常感谢您的任何建议,