2D指针指向C中的2D数组

时间:2013-11-07 11:01:39

标签: c++ c arrays

  1. 如何制作2d指针,如**检查指向2d数组 mycheck [] []?
  2. 如何将1d像check [16]转换为2d数组,如mycheck [4] [4]?
  3. 我的尝试

    float (*mycheck)[4] = (float (*)[4]) check;
    

    但是如果第二次我想再次使用mycheck来获取其他1d数组,我该怎么办?
    我的尝试:

    float (*mycheck)[4] = (float (*)[4]) other1darray;
    

    这肯定会给出重新声明错误。

4 个答案:

答案 0 :(得分:1)

第一个问题的答案是你不能那样做。您所能做的就是分配一些内存并复制数据。

第二个问题的答案非常简单

mycheck = (float (*)[4]) other1darray;

您只需要声明变量一次,之后只需使用变量名。

答案 1 :(得分:0)

当你放下[]时,数组a []衰减到指向第一个元素的指针。这不是递归发生的,换句话说,它不适用于[] []。

其次,您无法在C中分配数组。您只能初始化它们。您必须自己设置每个成员。

答案 2 :(得分:0)

您可以像这样在C中创建2D数组。 使用typedef可以更轻松。

typedef int **matrix;

matrix create2Darray(int row, int col)
{
    int idx;
    matrix m = malloc(row * sizeof(int*));
    for (idx = 0; idx < row; ++idx)
    {
        m[idx] = malloc(col * sizeof(int));
    }
    return m;
}

然后在另一个函数中调用它;

matrix check = create2Darray(2, 2);

答案 3 :(得分:0)

要将1D数组指定给2D数组,可以将指针指定给数组中的正确位置。以下是一个例子。它还展示了如何动态创建2D数组,但我对其进行了评论,因为该示例不需要它。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    float **matrix;
    float *array;

    array = (float *) malloc(16 * sizeof(float));
    for (size_t idx = 0; idx != 16; ++idx)
    {
        array[idx] = idx;
    }

    matrix = (float **) malloc(4 * sizeof(float *));
    for (size_t idx = 0; idx != 4; ++idx)
    {
        // matrix[idx] = malloc(4 * sizeof(int));
        matrix[idx] = &array[idx * 4];
    }


    for (size_t row = 0; row != 4; ++row)
    {
        for (size_t col = 0; col != 4; ++col)
        {
            printf("%.1f ", matrix[row][col]);
        }
        printf("\n");
    }
}

注意:这使得1D数组和2D数组指向相同的内存。如果您在1D中更改某些内容,它也会在2D中更改,反之亦然。如果您不想这样做,请先复制数组。