Arrays C语言,动态三维数组
我必须用C语言创建一个动态的三维整数数组 但是我必须单独创建指针并使用Arrays C语言,动态三维数组,arrays,c,malloc,Arrays,C,Malloc,我必须用C语言创建一个动态的三维整数数组 但是我必须单独创建指针并使用malloc。我知道如何使用malloc创建二维数组,但我对使用以下方法感到困惑,我真的找不到其他类似的问题 2x2x2整数数组 第一步: int *firstD; firstD = (int) malloc(2*sizeof(int)); 第二步: int *secondD; secondD = (int) malloc(2 * firstD * sizeof(int)); 第三步: int *thirdD;
malloc
。我知道如何使用malloc
创建二维数组,但我对使用以下方法感到困惑,我真的找不到其他类似的问题
2x2x2整数数组
第一步:
int *firstD;
firstD = (int) malloc(2*sizeof(int));
第二步:
int *secondD;
secondD = (int) malloc(2 * firstD * sizeof(int));
第三步:
int *thirdD;
thirdD = (int) malloc(2 * secondD * sizeof(int));
我想也许我必须在起始点(int*)添加指针,然后每一步增加一个指针
#包括
内部主(空){
int size1=2,size2=2,size3=2;
int***阵列;
数组=malloc(sizeof(int**)*size1);//1
对于(int i=0;i
在上面的示例中,我明确地编写了类型名称,但我建议使用取消引用来获取要分配的元素的大小,这样可以更好地防止导致键入错误
#include <stdlib.h>
int main(void) {
int size1 = 2, size2 = 2, size3 = 2;
int*** array;
// allocate arrays
array = malloc(sizeof(*array) * size1); // 1
for (int i = 0; i < size1; i++) {
array[i] = malloc(sizeof(*array[i]) * size2); // 2
for (int j = 0; j < size2; j++) {
array[i][j] = malloc(sizeof(*array[i][j]) * size3); // 3
}
}
// free arrays
for (int i = 0; i < size1; i++) {
for (int j = 0; j < size2; j++) {
free(array[i][j]);
}
free(array[i]);
}
free(array);
return 0;
}
#包括
内部主(空){
int size1=2,size2=2,size3=2;
int***阵列;
//分配数组
array=malloc(sizeof(*array)*size1);//1
对于(int i=0;i
在上面的示例中,我们已经给出了一些简单的方法,但是您应该检查
malloc()
的结果,看看分配是否成功。将malloc
的结果强制转换到int
是一个坏主意,因为它可能会破坏指针。将malloc
的结果强制转换为指针也是无效的。如果第二维度和第三维度是固定的,您可以使用指向2D数组的指针作为您的类型进行单个分配和释放。此外,虽然多维对象在C语言中非常好,但有时确实需要它们——但是,通常这也意味着您需要重新考虑数据处理需求。感谢您的回复,但我必须使用三个步骤(每一步创建一个指针)。这是我的教授为考试学习而制作的练习表,我被迫使用这种方法,因为分数的给出方式。我不能使用单线或其他功能。我还必须使用变量_name=(数据类型)malloc(..)格式。
#include <stdlib.h>
int main(void) {
int size1 = 2, size2 = 2, size3 = 2;
int*** array;
// allocate arrays
array = malloc(sizeof(*array) * size1); // 1
for (int i = 0; i < size1; i++) {
array[i] = malloc(sizeof(*array[i]) * size2); // 2
for (int j = 0; j < size2; j++) {
array[i][j] = malloc(sizeof(*array[i][j]) * size3); // 3
}
}
// free arrays
for (int i = 0; i < size1; i++) {
for (int j = 0; j < size2; j++) {
free(array[i][j]);
}
free(array[i]);
}
free(array);
return 0;
}