基本上我需要在C中创建一个数组的全局变量。数组将为[n] [22] [n + 1],其中n为3,4,5或6,由用户选择。
有没有办法做到这一点,或者我应该制作数组[6] [22] [7],并且处理它的函数只使用最多n的部分(如果这有意义的话)? / p>
我之前必须要做一个计算机科学课,但不记得究竟该怎么做。
答案 0 :(得分:3)
对于一个小的数组(好吧,假设数据类型合理),你可能最好不要在你的问题中提到你所提到的[6][22][7]
分配 - 这不像你会浪费那么多空间。不幸的是,C99可变长度数组不适用于全局数组。这意味着您唯一的其他选择是使用malloc()
/ free()
进行动态分配。
答案 1 :(得分:0)
您可以使用文件范围指针指向您在函数中动态分配(malloc
函数)的数组的第一个元素。
答案 2 :(得分:0)
如前所述,在这种特殊情况下,做除[6][22][7]
的静态分配以外的任何事情都是浪费时间。如果您真的想使用malloc
动态分配数组:
/* Suppose that you want a [5][22][6] */
int main() {
int i,j,k;
int ***boo;
int d_1,d_2,d_3;
d_1=5;
d_2=22;
d_3=6;
/*
+------------------------------------------+
| For each dimension, a malloc is needed |
+------------------------------------------+
*/
boo = malloc(d_1*sizeof(int*));
for (i=0;i<d_1;i++) {
boo[i] = malloc(d_2*sizeof(int*));
for (j=0;j<d_2;j++) {
boo[i][j] = malloc(d_3*sizeof(int*));
for (k=0;k<d_3;k++) {
boo[i][j][k] = i+j*k;
}
}
}
/*
+----------------------+
| Testing the values |
+----------------------+
*/
for (i=0;i<d_1;i++) {
for (j=0;j<d_2;j++) {
for (k=0;k<d_3;k++) {
printf("%d ",boo[i][j][k]);
}
printf("\n");
}
}
return 0;
}
这基本上可以解决问题。如果您有更多的数据,它可能会很有用。
不要忘记使用free()