在C中创建N个相同的数组
因此,我试图创建大小相同但名称略有不同的相同数组 我不能单独定义它们,因为在C中创建N个相同的数组,c,arrays,C,Arrays,因此,我试图创建大小相同但名称略有不同的相同数组 我不能单独定义它们,因为n取决于输入。 我能想到的唯一方法是使用for循环,如下所示: i=0; for (j=0;j<n;j++){ int array_i[256]; i=i+1; } i=0; 对于(j=0;j您可以使用##操作符,它可以将两个令牌粘贴在一起形成一个令牌,但这不是一个好的选择 #define MAKE_ARR(n) array_##n int MAKE_ARR(1)[256], MAKE_ARR(2)
n
取决于输入。
我能想到的唯一方法是使用for循环,如下所示:
i=0;
for (j=0;j<n;j++){
int array_i[256];
i=i+1;
}
i=0;
对于(j=0;j您可以使用##
操作符,它可以将两个令牌粘贴在一起形成一个令牌,但这不是一个好的选择
#define MAKE_ARR(n) array_##n
int MAKE_ARR(1)[256], MAKE_ARR(2)[256];
预处理后:
int array_1[256], array_2[256];
我的方法是使用二维数组
如何使用它:
int i, j; //counters
int array[n][256];
for (i=0; i<n; i++) {
for (j=0; j<256; j++) {
//enter code for element array[i][j] here
}
}
int i,j;//计数器
整数数组[n][256];
对于(i=0;i您需要将动态数组声明为大小为256的静态数组。由于您事先不知道有多少个数组,因此必须动态分配它们。以下是您可以执行的方法
int (*arrays)[256];
unsigned int i;
/* Reserve space for n arrays of 256 int elements */
arrays = malloc(sizeof(int) * 256 * n); /* or calloc() if you want it zeroed out */
/* Now you can access your arrays as if it was a normal 2D array */
arrays[i][j] = 42;
如果且仅当您有能力使用C99可变长度阵列时,这也是可能的:
int arrays[n][256];
请记住,它会吃掉堆栈上的n*256*sizeof(int)
字节,因此除非您能保证n是一个非常小的数字(如2或3)在堆栈上保留这么多空间可能不是一个好主意,使用malloc这样做更干净/更安全。看起来你真正想要的是拥有一个数组。在任何情况下,你都不能以你想要的方式做你想做的事情。这就是二维数组的用途。为什么你想让数组有名字?并不是有人会这样读它一本小说,你知道。注意!这种结构你不能用MAKE_ARR(i)按要求。这不会是动态的。但这与将它们命名为array1
,array2
,等等一样。@zubergu;假设您要编写一个函数,最多返回两个泛型类型。您将如何编写?最简单的方法是编写宏。#定义GEN#u max(type)type type类型##u max(type a,type b){return a>b?a:b}
。就这样。@zubergu;除非您正在学习如何执行令牌粘贴,否则什么都没有:)@zubergu;对不起,我收回了我的话。array_1[0]
将。数组必须动态分配。n
取决于用户输入。这在C99中是正确的,但是它很容易因n行而导致堆栈使用膨胀。请参阅我的答案以了解其他替代方法。