指针数组和指针数组的指针

时间:2012-11-10 13:12:22

标签: c++ c pointers

我不太清楚错误在哪里:

int *parr[22];  // Array of int* pointers
parr[0] = ptr1;
parr[1] = ptr2;
//... 

int *(*pparr)[22]; // A pointer to a int* array[22]
pparr = parr; // ERROR

错误告诉我error C2440: '=' : cannot convert from 'int *[22]' to 'int *(*)[22]'

为什么类型不相等?数组的名称应该等于对数组的第一个元素的引用,如

parr => &parr[0]

所以这条线似乎对我来说

3 个答案:

答案 0 :(得分:1)

int*[22]可以拒绝int**,但您无法将int**分配给int*(*)[22]

答案 1 :(得分:1)

由于pparrA pointer to a int* array[22],因此您需要编写

pparr = &parr;

您需要在指针中存储地址而不是指针本身。

就像你有

时一样
int a=3;
int *b;
b=&a;

您要存储b中的地址,同样需要在parr

中存储pparr的地址

编辑:澄清OP的评论

您不能指定第一个元素的地址,而是指向指向第一个元素的指针的地址。(因此pparr = &parr;

答案 2 :(得分:0)

int *(*pparr)[22];  //This one is an array of function-pointers returning an int pointer. 

int **pptr;  //Points to an array of pointer

所以你可以写

pptr = parr;