我试图根据用户输入声明数组,考虑用户输入2,然后我需要声明2个数组。像:int case1[10]={},case2[10]={}
,我尝试使用宏CONCAT,但它没有用,所以我们怎么做呢?
你不能这样做。变量声明是一个编译时间,早在用户与程序交互之前很久(在运行时)。宏也在编译时扩展。
但是每当你有变量名为foo1
,foo2
,foo3
等时,为什么不使用数组?然后你可以有foo[0]
,foo[1]
,foo[2]
等。
在您的情况下,标准的“动态阵列”技术适用。使用可变长度数组:
int n = get_user_input_somehow();
int arr[n][10];
或者使用传统的动态内存分配:
int n = get_user_input_somehow();
int (*arr)[10] = malloc(n * sizeof *arr);
if (!arr) {
handle error
}
并且不要忘记在完成后释放内存:
free(arr);
在任何一种情况下,您都可以使用arr[i][j]
来访问元素。