根据用户输入声明数组
Declaring arrays according the user input
我正在尝试根据用户输入声明数组,
考虑如果用户输入 2,那么我需要声明 2 个数组。
喜欢 :int case1[10]={},case2[10]={}
,
我尝试使用宏 CONCAT 但它没有用,那么我们该怎么做呢?
你不能那样做。变量声明是编译时的事情,远在用户与程序交互之前(在运行时)。宏也在编译时展开。
但是当你有名为 foo1
、foo2
、foo3
等的变量时,为什么不直接使用数组呢?那么你可以有foo[0]
、foo[1]
、foo[2]
等。
在您的情况下,标准 "dynamic array" 技术适用。要么使用变长数组:
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]
访问元素。
我正在尝试根据用户输入声明数组,
考虑如果用户输入 2,那么我需要声明 2 个数组。
喜欢 :int case1[10]={},case2[10]={}
,
我尝试使用宏 CONCAT 但它没有用,那么我们该怎么做呢?
你不能那样做。变量声明是编译时的事情,远在用户与程序交互之前(在运行时)。宏也在编译时展开。
但是当你有名为 foo1
、foo2
、foo3
等的变量时,为什么不直接使用数组呢?那么你可以有foo[0]
、foo[1]
、foo[2]
等。
在您的情况下,标准 "dynamic array" 技术适用。要么使用变长数组:
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]
访问元素。