一系列指针和指针指向一系列指针

Array of pointers and pointer to an array of pointers

本文关键字:指针 一系列      更新时间:2023-10-16

我不太了解此处的错误在哪里:

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]

所以这条线对我来说似乎是正确的

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

pparr = &parr;

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

这与您有

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

您正在存储A中的地址,同样,您需要将parr的地址存储在pparr

编辑:要澄清OP的评论

您无法分配第一个元素的地址,而是指向第一个元素的指针的地址。(因此pparr = &parr;

int*[22]可以衰减到 int**,但是您不能将int**分配给int*(*)[22]

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;