【问题标题】:C: Pointer to 2-dimensional array of pointersC:指向二维指针数组的指针
【发布时间】:2017-06-11 00:13:54
【问题描述】:

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

我有一个二维指针数组:

int* a[16][128];

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

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

我已经尝试了一些变体,但它要么在第一行失败,要么在 if 条件下失败。

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

【问题讨论】:

  • 你初始化了a的所有元素了吗?即int* a[16][5] = {NULL};,否则您的计算机当前可能是spray painting your cat purple
  • auto ptr = a; 应该可以完成这项工作,因此您的 ptr 将具有正确的类型。
  • 编译器不知道自动
  • C 和 C++ 是不同的语言。选择一个。您的编译器不支持 auto 作为类型说明符,这表明您要选择 C。

标签: c arrays pointers


【解决方案1】:

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

int* (*ptr)[128];

指向数组本身的指针是

int* (*ptr)[16][128];

这不是你要找的。​​p>

【讨论】:

  • 好的。但是 ptr 在内存中的大小是多少呢? sizeof(int*) 还是 128*sizeof(int*)?
  • @dspverden 您可以通过打印sizeof(ptr) 轻松检查。 (有 99.99% 的把握与sizeof(int*) 相同。)
  • @dspverden 嵌入式设备极不可能有不同大小的指针。 (只有非常深奥的硬件才能做到这一点。)除非您的文档另有说明,否则可以安全地假设 sizeof(T*) == sizeof(U*) 适用于所有类型 TU
【解决方案2】:

你似乎想要的东西:

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

指向数组的实际指针:

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

【讨论】:

    【解决方案3】:

    从一维数组的数组指针基础开始,[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;
    }
    

    有几个描述二维数组的相关堆栈溢出答案: 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 2018-01-04
      • 1970-01-01
      相关资源
      最近更新 更多