指向结构的指针数组

时间:2014-03-02 10:15:10

标签: c arrays pointers struct

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-&gt; fd [i]总是等于null?

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

1 个答案:

答案 0 :(得分:2)

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)始终为真,除非您提供完整的代码示例。