📄 myarrays.c
字号:
// MyArrays.c[pp] 动态分配多维(2,3,4维)数组(C/C++) Written by Li Qing.#include "MyArrays.h"#include <stdlib.h>/*=================== for 1D ===================*/void *Calloc1DArray(int n, int size_t){ return calloc(n, size_t);}void Free1DArray(void *array){ if(array) free(array);}/*=================== for 2D ===================*/void **Calloc2DArray(int n2, int n1, int size_t){ int i; unsigned long **Array=NULL; char *array=NULL; Array = (unsigned long**)calloc(n2, sizeof(long)); if(Array==NULL) return NULL; array = (char *)calloc(n2*n1, size_t); if(array==NULL) { free(Array); return NULL; } for(i=0; i<n2; i++) Array[i] = (unsigned long*)(array + i*n1*size_t); return (void**)Array;}void Free2DArray(void **array){ if(array[0]) free((char*)array[0]); if(array) free((unsigned long**)array);}/*=================== for 3D ===================*/void ***Calloc3DArray(int n3, int n2, int n1, int size_t){ int i, j; unsigned long ***Array=NULL; char *array=NULL; Array = (unsigned long***)calloc(n3, sizeof(long)); if(Array==NULL) return NULL; Array[0] = (unsigned long**)calloc(n3*n2, sizeof(long)); if(Array[0]==NULL) { free(Array); return NULL; } for(j=1; j<n3; j++) Array[j] = Array[0] + j*n2; array = (char *)calloc(n3*n2*n1, size_t); if(array==NULL) { free(Array[0]); free(Array); return NULL; } for(j=0; j<n3; j++) for(i=0; i<n2; i++) Array[j][i] = (unsigned long*)(array + (j*n2 + i)*n1*size_t); return (void***)Array;}void Free3DArray(void ***array){ if(array[0][0]) free((char*)array[0][0]); if(array[0]) free((unsigned long**)array[0]); if(array) free((unsigned long***)array);}/*=================== for 4D ===================*/void ****Calloc4DArray(int n4, int n3, int n2, int n1, int size_t){ int i, j, k; unsigned long ****Array=NULL; char *array=NULL; Array = (unsigned long****)calloc(n4, sizeof(long)); if(Array==NULL) return NULL; Array[0] = (unsigned long***)calloc(n4*n3, sizeof(long)); if(Array[0]==NULL) { free(Array); return NULL; } for(k=1; k<n4; k++) Array[k] = Array[0] + k*n3; Array[0][0] = (unsigned long**)calloc(n4*n3*n2, sizeof(long)); if(Array[0][0]==NULL) { free(Array[0]); free(Array); return NULL; } for(k=0; k<n4; k++) for(j=0; j<n3; j++) Array[k][j] = Array[0][0] + (k*n3 + j)*n2; array = (char *)calloc(n4*n3*n2*n1, size_t); if(array==NULL) { free(Array[0][0]); free(Array[0]); free(Array); return NULL; } for(k=0; k<n4; k++) for(j=0; j<n3; j++) for(i=0; i<n2; i++) Array[k][j][i] = (unsigned long*)(array + ((k*n3+j)*n2 + i)*n1*size_t); return (void****)Array;}void Free4DArray(void ****array){ if(array[0][0][0]) free((char*)array[0][0][0]); if(array[0][0]) free((unsigned long**)array[0][0]); if(array[0]) free((unsigned long***)array[0]); if(array) free((unsigned long****)array);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -