二级指针,指向指针的指针

struct CQ g_CQ;
struct CQ *pgCQ;

STATUS CQ_create(int max)
{
unsigned int i;

CMD_BUFFER **ppCmd;
CMD_BUFFER **ppCmd2;
CMD_BUFFER *pCmd;

g_CQ.head=0;
g_CQ.tail=0;
g_CQ.size=0;
g_CQ.max=max;

ppCmd=(CMD_BUFFER **)malloc(sizeof(CMD_BUFFER)*max);
if(NULL==ppCmd)
    return ERROR;



bzero(ppCmd,sizeof(*ppCmd)*256);

g_CQ.ppCmd=ppCmd;

pCmd=ppCmd;
for(i=0;i<g_CQ.max;i++)
{
    pCmd->cmdParameter=(unsigned char *)malloc(sizeof(unsigned char)*256);
    pCmd++;
}
return OK;

}

STATUS CQ_IN(CMD_BUFFER *p)
{
struct CQ *Q=&g_CQ;
CMD_BUFFER *pcmd;
if(IS_FULL(Q))
{
printf(“Error, Q FULL\n”);
return -ERROR;
}
pcmd=Q->ppCmd;
pcmd=pcmd+Q->tail;

pcmd->cmd=p->cmd;
pcmd->cmdId=p->cmdId;
memcpy(pcmd->cmdParameter,p->cmdParameter,256);


Q->tail=(Q->tail+1)%MAX_Q_SIZE;
Q->size++;
//printf("Q->Head=%d,Q->Tail=%d,Q->Size=%d\n",g_CQ.head,g_CQ.tail,g_CQ.size);
return OK;

}
STATUS CQ_OUT(CMD_BUFFER *p)
{
struct CQ *Q=&g_CQ;
CMD_BUFFER *pcmd;

if(IS_EMPTY(Q))
{
   printf("Error, Q empty\n");
   return -ERROR;
}
pcmd=Q->ppCmd;
pcmd=pcmd+Q->head;

p->cmd=pcmd->cmd;
p->cmdId=pcmd->cmdId;
memcpy(p->cmdParameter,pcmd->cmdParameter,256);

Q->head=(Q->head+1)%MAX_Q_SIZE;
Q->size--;
//printf("Q->Head=%d,Q->Tail=%d,Q->Size=%d\n",g_CQ.head,g_CQ.tail,g_CQ.size);
return OK;      

}

struct CQ *pgCQ;

CMD_BUFFER **ppCmd;

STATUS createCQ(void)
{
unsigned int i;

CMD_BUFFER *pCmd;


pgCQ=calloc(1,sizeof(struct CQ));

if(NULL==pgCQ)
    return ERROR;

pgCQ->head=0;
pgCQ->tail=0;
pgCQ->size=0;
pgCQ->max=MAX_Q_SIZE;

*ppCmd=calloc(MAX_Q_SIZE,sizeof(CMD_BUFFER));

printf("ppCmd=0x%x,*ppCmd=0x%x\n",ppCmd,*ppCmd);

if(NULL==*ppCmd)
    return ERROR;

//bzero(*ppCmd,sizeof(*ppCmd)*256);

*g_CQ.ppCmd=*ppCmd;

pCmd=*ppCmd;
for(i=0;i<g_CQ.max;i++)
{
    pCmd->cmdParameter=(unsigned char *)malloc(sizeof(unsigned char)*256);
    pCmd->length=512;
    pCmd++;
}

printf("Create CQ OK\n");
return OK;

}

STATUS PutInCQ(struct CQ *pQ,CMD_BUFFER *p)
{
struct CQ *Q=pQ;
CMD_BUFFER *pcmd;
if(IS_FULL(Q))
{
printf(“Error, Q FULL\n”);
return -ERROR;
}
pcmd=*(Q->ppCmd);
pcmd=pcmd+Q->tail;

pcmd->cmd=p->cmd;
pcmd->cmdId=p->cmdId;
memcpy(pcmd->cmdParameter,p->cmdParameter,256);


Q->tail=(Q->tail+1)%MAX_Q_SIZE;
Q->size++;
printf("Q->Head=%d,Q->Tail=%d,Q->Size=%d\n",Q->head,Q->tail,Q->size);
return OK;

}
STATUS GetOutCQ(struct CQ *pQ,CMD_BUFFER *p)
{
struct CQ *Q=pQ;
CMD_BUFFER *pcmd;

if(IS_EMPTY(Q))
{
   printf("Error, Q empty\n");
   return -ERROR;
}
pcmd=*(Q->ppCmd);
pcmd=pcmd+Q->head;

p->cmd=pcmd->cmd;
p->cmdId=pcmd->cmdId;
memcpy(p->cmdParameter,pcmd->cmdParameter,256);

Q->head=(Q->head+1)%MAX_Q_SIZE;
Q->size--;
printf("Q->Head=%d,Q->Tail=%d,Q->Size=%d\n",Q->head,Q->tail,Q->size);
return OK;      

}

typedef struct val
{
int m;
int n;
int *(*addr);
};

typedef struct pp
{
int *pdata;
};
typedef struct val2
{
int m;
int n;
struct pp **addr;
};

struct val val1;
struct val val2;

void test3(void)
{
int i,j;
val2.m=10;
val2.n=10;
struct pp *p;
val2.addr=(int )malloc(val2.n*sizeof(struct pp));

printf("*val2.addr=0x%x\n",*val2.addr);
p=*val2.addr;
for(i=0;i<10;i++)
{
    p->pdata=(int *)malloc(sizeof(int)*val2.m);
    p++;
}

}

void test2(void)
{
int i,j;
val1.m=10;
val1.n=10;
val1.addr=(int *)malloc(val1.m*sizeof(int ));

for(i=0;i<val1.m;i++)
{
    val1.addr[i]=(int *)malloc(val1.n*sizeof(int));

}

for(i=0;i<10;i++)
    for(j=0;j<10;j++)
    {
        *(val1.addr[i]+j)=i*j;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值