gpt4 book ai didi

c - 用于更新指向未知维度的二维数组的指针的原型(prototype)

转载 作者:行者123 更新时间:2023-11-30 16:57:48 24 4
gpt4 key购买 nike

我想定义一个接口(interface),它接受一个指向未知大小数组的指针。函数体应使用已静态分配的数组填充此数组。

问题是,我传递的数组是一维未知的二维数组的一部分:

T_MY_STRUCT (*pMyConfigArray)[][2];

我只想在每次调用接口(interface)时沿着已知维度进行更新。

并且预先分配的数组在另一个文件中定义(接口(interface)的原因)如下(2的维度已知,但10未知由调用方):

T_MY_STRUCT preAllocatedArray[2][10] = 
{
{
{0,TRUE,0,1,&dummyParam[0]},
{1,TRUE,1,1,&dummyParam[1]},
{2,TRUE,2,1,&dummyParam[2]},
{3,TRUE,3,1,&dummyParam[3]},
{4,TRUE,4,1,&dummyParam[4]},
{5,TRUE,5,1,&dummyParam[5]},
{6,TRUE,6,1,&dummyParam[6]},
{7,TRUE,7,1,&dummyParam[7]},
{8,TRUE,8,1,&dummyParam[8]},
{9,TRUE,9,1,&dummyParam[9]}
},
{
{0,TRUE, 0,1,&dummyParam[0]},
{1,FALSE,1,1,&dummyParam[1]},
{2,TRUE, 2,1,&dummyParam[2]},
{3,FALSE,3,1,&dummyParam[3]},
{4,TRUE, 4,1,&dummyParam[4]},
{5,FALSE,5,1,&dummyParam[5]},
{6,TRUE, 6,1,&dummyParam[6]},
{7,FALSE,7,1,&dummyParam[7]},
{8,TRUE, 8,1,&dummyParam[8]},
{9,FALSE,9,1,&dummyParam[9]}
}
};

允许结构“复制”的接口(interface)函数实现如下:

int retrieveConfigArray(int arrayIndex, T_MY_STRUCT (**configTab)[])
{
int nbParam = 0;

if ((configTab != NULL_VOID_PTR) && (arrayIndex < 2))
{
*configTab = &(preAllocatedArray[mmsPid]);
nbParam = 10;
}

return nbParam;
}

我将 pMyConfigArray 的地址传递给此函数,以便可以更新它:

retrieveConfigArray(0, &(pMyConfigArray[][0])) /* Error Here */
retrieveConfigArray(1, &(pMyConfigArray[][1])) /* Error Here */

我的问题是,如何定义这些数组定义/声明以及函数原型(prototype)以获得所需的行为?如上所述我收到错误:在传递数组的行上无效使用具有未指定边界的数组。如何利用数组指针衰减和寻址运算符将指针传递到与接口(interface)函数原型(prototype)匹配的正确维度?

最佳答案

所以我遇到的问题与我如何声明指向数组pMyConfigArray的指针有关。我将其定义为指向 T_MY_STRUCT 结构的二维数组的指针:

T_MY_STRUCT (*pMyConfigArray)[][2];

事实上,我需要的是一个指向结构数组的指针数组:

T_MY_STRUCT (*pMyConfigArray[])[2] = {NULL, NULL};

这种语义差异使用不同的声明语法,并且必须进行初始化。

此资源位于 C Wikibook可能对处于类似情况的人有用。它列出了各种数组/指针结构以供引用:

int i;         // integer variable 'i'
int *p; // pointer 'p' to an integer
int a[]; // array 'a' of integers
int f(); // function 'f' with return value of type integer
int **pp; // pointer 'pp' to a pointer to an integer
int (*pa)[]; // pointer 'pa' to an array of integer
int (*pf)(); // pointer 'pf' to a function with return value integer
int *ap[]; // array 'ap' of pointers to an integer
int *fp(); // function 'fp' which returns a pointer to an integer
int ***ppp; // pointer 'ppp' to a pointer to a pointer to an integer
int (**ppa)[]; // pointer 'ppa' to a pointer to an array of integers
int (**ppf)(); // pointer 'ppf' to a pointer to a function with return value of type integer
int *(*pap)[]; // pointer 'pap' to an array of pointers to an integer
int *(*pfp)(); // pointer 'pfp' to function with return value of type pointer to an integer
int **app[]; // array of pointers 'app' that point to pointers to integer values
int (*apa[])[];// array of pointers 'apa' to arrays of integers
int (*apf[])();// array of pointers 'apf' to functions with return values of type integer
int ***fpp(); // function 'fpp' which returns a pointer to a pointer to a pointer to an int
int (*fpa())[];// function 'fpa' with return value of a pointer to array of integers
int (*fpf())();// function 'fpf' with return value of a pointer to function which returns an integer

关于c - 用于更新指向未知维度的二维数组的指针的原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39329528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com