int *(* papi [10])是什么意思

时间:2014-07-14 13:32:10

标签: c pointers

我使用了cdecl并将其定义为“将papi声明为指向int的指针的数组10” 所以我用这种方式编写代码

int i = 10;
int *api[10];
api[0] = &i;
int *(*papi[10]);
papi = &api;

我得到一个错误,说“数组类型'int [10])'不可分配”

使用papi的正确方法是什么?

3 个答案:

答案 0 :(得分:3)

数组名称是不可修改的l值。您不能将它们用作=运算符的左操作数。 papi是一个数组名称。改变

int *(*papi[10]);  

int *(*papi)[10]; // papi is pointer to an array of 10 pointers to int

答案 1 :(得分:2)

您不能在C中分配数组。您似乎想要做的是:

int i = 10;
int *api[10];
api[0] = &i;
int *(*papi)[10];
papi = &api;

papi声明为指向int的10个指针数组的指针。这是&api的类型,它将10个元素的指针数组的地址转换为int

HTH

答案 2 :(得分:1)

我解释了短语“将papi声明为指向指向int的指针的数组10”,因为它声明了一个指向int的10个指针的数组。:)

尝试以下

#include < stdio.h>


int main( void )
{
    int i = 10;
    int *api[10] = { &i };
    int **papi[10];
    papi[0] = api;

    printf( "%d\n", ***papi );
}

输出

10