将数组拆分为较小块的最佳方法-C编程

时间:2019-11-15 18:53:56

标签: c arrays

将大小为2000的数组拆分为250个元素的块的最佳方法是什么。 array [2000]->分成250个元素的块,8个子数组。 谢谢。

1 个答案:

答案 0 :(得分:3)

给出:

#define ARRAY_SIZE 2000
#define CHUNKS 8
#define CHUNK_SIZE = (ARRAY_SIZE / CHUNKS)
atype array[ARRAY_SIZE] ;

然后:

atype* chunks[CHUNKS] ;
for( int i = 0; i < CHUNKS; i++ )
{
    chunks[i] = &array[i * CHUNK_SIZE] ;
}
然后可以访问

chunks,就像
是二维数组chunks[8][250]一样。但是,有一些重要的区别。

实际上,定义数组chunks[8][250],然后创建一个单个指针array来引用组合的块可能更有意义:

atype chunks[CHUNKS][CHUNK_SIZE] ;
atype* array = (atype*)chunks ;

然后,chunks是一个真正的二维数组,而array可以被访问,就像是一个数组array[2000]一样-但是它又是< em> not 完全相同。显然,这样做的好处是初始化更简单-不需要循环。

两者之间的区别是:

enter image description here

重要的是,在第一个中:

sizeof(array) == sizeof(atype * ARRAY_SIZE)
sizeof(chunks) == sizeof( atype* * CHUNKS)

第二次:

sizeof(array) == sizeof(atype*)
sizeof(chunks) == sizeof( atype * CHUNKS * CHUNK_SIZE)

如果要复制或移动数据,这些区别很重要。