指向結構體的指針和指向結構體指針的指針

2020-08-13 09:55:59

例如,struct T *ptr;是指向一個結構體的指針,也可以當做一個結構體陣列來用。 可以把結構體當做 int 來看,int* 型別即可以指向一個整數,也可以指向陣列。

struct T ** ptr, 說白了 就是一個結構體指針的陣列,陣列內都是指針,還要分配記憶體。

1,結構體指針用法一:

struSysInfo *SysInfo;

SysInfo = (struSysInfo*)malloc(sizeof(struSysInfo));

SysInfo->VERSION = (char *)malloc(sizeof(char)*10);//VERSION 是結構體中的一個char指針

2,結構體指針用法二:

struParamModel *pParamModel;

ParaModelNum = 20;

pParamModel = (struParamModel*)malloc(sizeof(struParamModel)*ParaModelNum);

for(i = 0;i < ParaModelNum;i++)

pParamModel[i].VERSION = (char *)malloc(sizeof(char)*10);//VERSION 是結構體中的一個char指針

 

3,指向結構體指針的指針用法一:

BlockCfg **pBlockCfg;

wBlockNum = 100;

devp->pBlockCfg = (BlockCfg**)malloc(sizeof(BlockCfg*)*wBlockNum);

for(b = 0;b < wBlockNum ; b++)

{

      devp->pBlockCfg[b] = (BlockCfg*)malloc(sizeof(BlockCfg));
      memset(devp->pBlockCfg[j]->BlockType, '\0', 32);//BlockType是結構體中的一個佔32位元組空間的char型陣列

}

4,指向結構體指針的指針用法二:

FrozenTpyes **pFrozeTypes;//一維對應di2pos,二維對應di0pos

wDI2Max = 20;

devp->pFrozeTypes = (FrozenTpyes**)malloc(sizeof(FrozenTpyes*)*wDI2Max);

for(a = 0;a < wDI2Max;a++)

{

    wFrozeTimes[a] = a+10; 

    devp->pFrozeTypes[a] = (FrozenTpyes*)malloc(sizeof(FrozenTpyes)*wFrozeTimes[a]);

   for(b = 0; b < wFrozeTimes[a];b++)//次數

   {

     memset(devp->pFrozeTypes[a][b].chFrozTime,0,12);//chFrozTime爲結構體中佔12位元組空間的char型陣列

   }

}