指针数组的指针

mot*_*sch 14 c arrays pointers

我有一个int指针数组,int* arr[MAX];我想将其地址存储在另一个变量中.如何定义指针数组的指针?即:

int* arr[MAX];
int (what here?) val = &arr;
Run Code Online (Sandbox Code Playgroud)

Kos*_*Kos 23

正确答案是:

int* arr[MAX];
int* (*pArr)[MAX] = &arr;
Run Code Online (Sandbox Code Playgroud)

要不就:

        int* arr  [MAX];
typedef int* arr_t[MAX];

arr_t* pArr = &arr;
Run Code Online (Sandbox Code Playgroud)

最后一部分读作"pArr是指向int类型指针的MAX元素数组的指针".

在C中,数组的大小存储在类型中,而不是存储在值中.如果你想让这个指针正确地处理数组上的指针运算(如果你想用它们制作一个二维数组并使用这个指针迭代它),你 - 通常不幸的是 - 需要有数组嵌入指针类型的大小.

幸运的是,既然C99和VLA(甚至可能早于C99?)MAX可以在运行时指定,而不是编译时.


Jas*_*son 17

应该只是:

int* array[SIZE];
int** val = array;  
Run Code Online (Sandbox Code Playgroud)

array由于数组在赋值运算符的右侧衰减为隐式指针,因此无需使用地址运算符.

  • 是的,`val`是指向`int`指针数组的指针(从语义上讲)...如果你取消引用`val`,你最终会得到你的指针数组,即你可以做`(*val)[INDEX]`.因此`val`将地址保存到`int*`数组的开头,然后它是一个指针数组的指针. (5认同)
  • @RafaelEyng你可以在这里查看[这个答案](/sf/answers/102347241/) (2认同)