解码C声明并使用它

luk*_*ell 6 c pointers declaration

我正在使用GeomagnetismLibrary,其中一个函数声明有一个格式

int MAG_robustReadMagModels(char *filename, MAGtype_MagneticModel *(*magneticmodels)[], int array_size)
Run Code Online (Sandbox Code Playgroud)

为了简单起见,我把它简化为专注于我的目标

void blah(int *(*a)[])
{
    (*a)[0] = malloc(sizeof(int));
    (**a)[0] = 12;
}
Run Code Online (Sandbox Code Playgroud)

如果我想调用这个函数,我必须声明一个变量,如:

int *a[1];
blah(&a);
Run Code Online (Sandbox Code Playgroud)

现在在我的情况下,不管什么a永远不会有多个元素,所以我不想声明a为数组,而只是像指针一样

int *a;
Run Code Online (Sandbox Code Playgroud)

有没有什么办法可以在调用时blah根据需要键入强制转换或取消引用这个变量而不会导致段错误?

另外,您如何根据类型转换定义该类型,例如:( int *[]*)?

谢谢

alk*_*alk 3

这会做:

int * b;

blah((int *(*)[]) &b);
Run Code Online (Sandbox Code Playgroud)