又一次搬家囉! https://blog.inndy.tw

about 5 years ago

code

#include <cstring> // for memcpy  
#define NEW2D(H, W, T) (T **)new2d(H, W, sizeof(T))  
#define CPY2D(TAR, SRC, H, W, T) cpy2d((void**)TAR, (void**)SRC, H, W, sizeof(T))  
#define DEL2D(P) (delete [] P)  
  
void cpy2d(void** tar, void** src, int h, int w, int size) {  
 for (register int i = 0; i < h; i++)  
 memcpy(tar[i], src[i], size * w);  
}  
  
void* new2d(int h, int w, int size)  
{  
 register int i;  
 void **p;  
 p = (void**)new char[h * sizeof(void*) + h * w * size];  
 for(i = 0; i < h; i++)  
 p[i] = ((char *)(p + h)) + i * w * size;  
 return p;  
}  

Using Demo...

int **map = NEW2D(16, 32, int); // Height, Width, Type  
scanf("%d", &map[15][31]);  
printf("%d\n", map[15][31] + 1);  
int **map2 = NEW2D(16, 32, int); // Another 2D array  
CPY2D(map2, map, 16, 32, int); // Copy to another array  
printf("%d\n", map2[15][31] + 2);  
DEL2D(map); // Free meory  
DEL2D(map2);

Reference

← iAutoUpdater -- Binary Signature Updater Notepad++密技 內建自動完成 / 手寫HTML神插件 / HexEditor插件 →
 
comments powered by Disqus