gpt4 book ai didi

c - 指向结构的指针数组

转载 作者:太空宇宙 更新时间:2023-11-04 02:51:06 27 4
gpt4 key购买 nike

typedef struct Oft{
int mode;
int refCount;
} OFT;

typedef struct proc{
struct proc *next;
int uss, usp;
int pid; // add pid for identify the proc
int status; // status = FREE|READY|RUNNING|SLEEP|ZOMBIE
int ppid; // parent pid
OFT *fd[10];
int kstack[1024]; // per proc stack area
}PROC;

我将如何初始化和使用我的 *fd[10] 变量?

假设我有

PROC *p;

这是初始化它的 *fd[10] 的正确方法吗?

for(i = 0; i < 10; i++)
{
p->fd[i] = (OFT *) malloc (sizeof(OFT));
(*p->fd)[0] = Some OFT object?
}

为什么当我进行以下检查时,p->fd[i] 总是等于 null?

if (p->fd[i] == NULL)
//Do sometiong

最佳答案

p->fd[i] = malloc(sizeof(OFT));

是正确的,只要您通过使用 malloc() 或使其指向某个 PROC 变量,为 p 提供了指向的空间。请注意,您不需要转换,因为 malloc() 返回一个 void *,它会自动转换为任何类型的指针。但是,您应该检查 malloc() 是否返回 NULL

(*p->fd)[0]

是错误的,将导致编译器错误。如果你有一个名为 myoft 的 OFT 对象;您可以像使用 malloc 一样分配它;当然,因为 fd[x] 是一个指针,所以你想得到对象的地址:

p->fd[x] = &myoft;

如果您想访问其中一个 OFT 的组件之一,例如,您可以使用

p->fd[x]->refCount++;

我无法回答最后一个问题,为什么 if (p->fd[i] == NULL) 始终为真,除非您提供完整的代码示例。

关于c - 指向结构的指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22126301/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com