C:指向二维指针数组的指针

时间:2017-01-25 17:31:57

标签: c arrays pointers

我正在尝试解决以下问题但尚未成功:

我有两个diwmensional指针数组:

int* a[16][128];

现在我想以这种方式创建一个指向这个数组的指针,我可以在其上使用指针算法。 因此,像这样:

ptr = a;
if( ptr[6][4] == NULL )
  ptr[6][4] = another_ptr_to_int;

我已经尝试了一些变化,但它在第一行或if条件下都失败了。

那么,怎么解决呢?我想避免模板类等。代码是嵌入式应用程序的时间关键部分,内存非常有限。因此,我希望ptr只有sizeof(int*)个字节长。

3 个答案:

答案 0 :(得分:2)

指向数组第一个元素的指针(这是你想要的)可以声明为

cityId = 1
startDate = 2017-01-25
endDate = 2017-01-26

指向数组本身的指针是

int* (*ptr)[128];

而不是你正在寻找的东西。

答案 1 :(得分:1)

你似乎想要的东西:

int* (*ptr)[128] = a; 

指向数组的实际指针:

int* (*ptr)[16][128] = &a;

答案 2 :(得分:0)

从一维数组的数组指针基础开始,[tutorialspoint] [1]有一个非常容易理解的描述。从他们的例子来看:

    #include <stdio.h>

int main () {

   /* an array with 5 elements */
   double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
   double *p;
   int i;

   p = balance;                                 //Here the pointer is assign to the start of the array

   /* output each array element's value */
   printf( "Array values using pointer\n");

   for ( i = 0; i < 5; i++ ) {
      printf("*(p + %d) : %f\n",  i, *(p + i) );
   }

   printf( "Array values using balance as address\n");

   for ( i = 0; i < 5; i++ ) {
      printf("*(balance + %d) : %f\n",  i, *(balance + i) );    // Note the post increment
   }

   return 0;
}

有一些描述2D数组的相关堆栈溢出答案: How to use pointer expressions to access elements of a two-dimensional array in C?

Pointer-to-pointer dynamic two-dimensional array

how to assign two dimensional array to **pointer ?

Representing a two-dimensional array assignment as a pointer math?

  [1]: https://www.tutorialspoint.com/cprogramming/c_pointer_to_an_array.htm