指向数组的指针何时有用?

zah*_*pov 10 c pointers

我可以声明:

int (*ap)[N];

那么ap是指向大小为N的int数组的指针.为什么这有用呢?如果我将它传递给函数,它可以用它做什么有用的事情,它只能用一个指向数组内容的普通指针?

C FAQ说:

2.12:如何声明指向数组的指针?

通常,你不想.

Mar*_*nen 13

指向阵列的指针可用于动态分配多维阵列N,其中N-1维度是已知的.下面创建一个Nx3数组.

int (*ap)[3];
ap = malloc(N * sizeof(*ap));
/* can now access ap[0][0] - ap[N-1][2] */
Run Code Online (Sandbox Code Playgroud)

@Adam E/Cruachan,这与指针指针不同.ap是指向包含三个连续整数的内存块的单个指针.ap ++将指针地址前进到下一个三个整数的块.for int **pp;,pp指向一个整数指针,每个指针都可以指向内存中任何位置的整数.

         +-----+                +------+    +-----+
 ap ---> | int |   vs.  pp ---> | int* | -> | int |
         | int |                +------+    +-----+
         | int |        pp+1 -> | int* | -\
         +-----+                +------+   \   +-----+
 ap+1 -> | int |                  :  :      -> | int |
         | int |                               +-----+
         | int |
         +-----+
           : :  
Run Code Online (Sandbox Code Playgroud)

  • 是的,但它与"int ap [4] [3];"不同.它允许动态分配第二维. (2认同)

Ste*_*son 6

如果递增指针,它将指向下一组N个元素的开头.

这不是什么大问题,它的使用取决于开发人员.

  • 天哪,你有没见过这个? (4认同)

zah*_*pov -5

我认为整个讨论的结论是永远不会。这里没有人真正展示了这种结构的用途,因为其他东西无法以更容易理解的方式工作。