对指针和括号语法感到困惑

时间:2020-10-30 22:44:52

标签: c pointers

试图破译以下功能。 我知道pCfg是任何类型的指针,但是我不确定*(AppBIACfg_Type**)pCfg = &AppBIACfg;分配给&AppBIACfg的地址。

AD5940Err AppBIAGetCfg(void *pCfg)
{
  if(pCfg){
    *(AppBIACfg_Type**)pCfg = &AppBIACfg;
    return AD5940ERR_OK;
  }
  return AD5940ERR_PARA;
}

2 个答案:

答案 0 :(得分:3)

它将获取全局AppBIACfg变量的地址,并将其存储在pCfg指向的内存中。强制类型转换对于类型正确性是必需的。

所以,如果您有类似的东西:

AppBIACfg_Type *foo;
AppBIAGetCfg(&foo);

等同于

foo = &AppBIACfg;

请参见Changing address contained by pointer using function

答案 1 :(得分:0)

对指针和括号语法感到困惑

  • (AppBIACfg_Type**)pCfg :Tye将类型为pCfg的任何类型强制转换为AppBIACfg_Type双指针。

  • *(AppBIACfg_Type**)pCfg :(请注意起始星号);取消引用该双指针,检索单个指针。

  • ... = &AppBIACfg :将AppBIACfg的内存地址分配给单个指针。

所以...

该表达式将AppBIACfg的内存地址分配给AppBIACfg_Type指针,该指针是从void强制转换而成的。