⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myarrays.c

📁 格子Boltzmann方法 格子Boltzmann方法是为了保留格子气自动机方法的优点
💻 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 + -