这是我的代码:
#include <stdlib.h> //malloc
#define lineSize 16
#define columnSize 16
#define cellSize 16
int main()
{
unsigned char*** tab;
tab = malloc(sizeof(unsigned char**) * lineSize);
for(unsigned int i = 0; i < lineSize; i++)
tab[i] = malloc(sizeof(unsigned char*) * columnSize);
for(unsigned int i = 0; i < lineSize; i++)
for(unsigned int j = 0; j < columnSize; j++)
tab[i][j] = malloc(sizeof(unsigned char) * cellSize);
unsigned int line = 0;
unsigned int column = 0;
unsigned int cell = 0;
unsigned char* ptr = &tab[line][column][cell];
for(line = 0; line < lineSize; line++)
for(column = 0; column < columnSize; column++)
for(cell = 0; cell < cellSize; cell++)
*ptr = ...;
return 0;
}
这段代码会用在运行时才能确定的值来填充表格。
当lineSize、columnSize和cellSize较小时,没有太多问题。但是,当cellSize变成100000以上时,指针解引用的时间成本就变得很高了。因此,我考虑使用指针来避免解引用。
问题是,我不知道如何更新指针,以便跟随line、column或cell的更改而更新。
感谢您的帮助,谢谢。
编辑:更多解释:
随着lineSize、columnSize和cellSize越来越大,执行时间越长是可以预料的。但是,在循环内部花费了很多时间,而在循环内部,指针被解引用了16*16*100000次(当cellSize=100000时)。
如果我没错的话,解引用就像乘法一样:
tab[2][5][3] = tab + 2*16*100000 + 5*100000 + 3;
而像16*16*100000 这样的数学计算会很费时间。
所以为了避免这种计算,我想到了一个指针,它永久指向tab[line][column][cell]
,但我不知道如何在cell
增加时不必每次重新计算指针。
tab[line][column][cell]
一两次即可。 - Yunnoschtab[line][column][cell]
。 - Tom Clabault