将大小为2000的数组拆分为250个元素的块的最佳方法是什么。 array [2000]->分成250个元素的块,8个子数组。 谢谢。
答案 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 完全相同。显然,这样做的好处是初始化更简单-不需要循环。
两者之间的区别是:
重要的是,在第一个中:
sizeof(array) == sizeof(atype * ARRAY_SIZE)
sizeof(chunks) == sizeof( atype* * CHUNKS)
第二次:
sizeof(array) == sizeof(atype*)
sizeof(chunks) == sizeof( atype * CHUNKS * CHUNK_SIZE)
如果要复制或移动数据,这些区别很重要。