在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行而导致堆栈使用膨胀。请参阅我的答案以了解其他替代方法。