我的尝试
float (*mycheck)[4] = (float (*)[4]) check;
但是如果第二次我想再次使用mycheck来获取其他1d数组,我该怎么办?
我的尝试:
float (*mycheck)[4] = (float (*)[4]) other1darray;
这肯定会给出重新声明错误。
答案 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中更改,反之亦然。如果您不想这样做,请先复制数组。