-2
  1. 如何使像**检查点这样的二维指针像mycheck [] []这样的二维数组?
  2. 如何将像 check[16] 这样的 1d 转换为像 mycheck[4][4] 这样的 2d 数组?

我的尝试

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

但是,如果我第二次想将 mycheck 再次用于其他一维数组,我该怎么办?
我的尝试:

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

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

4

4 回答 4

1

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

第二个问题的答案很简单

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

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

于 2013-11-07T11:06:53.137 回答
0

您可以像这样在 C 中创建一个二维数组。使用 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);
于 2013-11-07T11:12:55.963 回答
0

删除 [] 时,数组 a[] 衰减为指向第一个元素的指针。这不会递归发生,换句话说,它不适用于 a[][]。

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

于 2013-11-07T11:08:39.423 回答
0

要将一维数组分配给二维数组,您可以将指针分配到数组中的正确位置。下面是一个例子。它还展示了如何动态创建 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 中更改,反之亦然。如果你不想要这个,首先复制数组。

于 2013-11-07T11:24:28.710 回答