c malloc实现:动态申请三维数组

#include <stdio.h>
#include <stdlib.h>

int main()
{
	float ***p = NULL;  // p[pen_num][row][col];
	int i, j, k;
	int pen_num = 3, row = 4, col = 3; // 3个栏位,每个栏位4行3列
		
	/* 申请3个栏指针 */
	p = (float ***)malloc(pen_num * sizeof(float **));
	if (NULL == p)
	{
		printf("malloc fail\n");
		return -1;
	}
	
	for (i = 0; i < pen_num; i++)
	{
		/* 申请4个行指针 */
		p[i] = (float **)malloc(row * sizeof(float *));
		if (NULL == p[i])
		{
			printf("malloc fail\n");
			return -1;
		}
		
		for (j = 0; j < row; j++)
		{
			/* 为每个行指针申请列空间 */
			p[i][j] = (float *)malloc(col * sizeof(float));
			if (NULL == p[i][j])
			{
				printf("malloc fail\n");
				return -1;
			}
		}

	}
	
	/* 赋值 */
	for (i = 0; i < pen_num; i++)
	{
		for (j = 0; j < row; j++)
		{
			for (k = 0; k < col; k++)
			{
				p[i][j][k] = i + j + k + 5.23;
			}
		}
	}
	
	/* 打印 */
	for (i = 0; i < pen_num; i++)
	{
		for (j = 0; j < row; j++)
		{
			for (k = 0; k < col; k++)
			{
				printf("%f ", p[i][j][k]);
			}
			printf("\n");
		}
		printf("\n\n");
	}
	
	/* free */
	for (i = 0; i < pen_num; i++)
	{
		for (j = 0; j < row; j++)
		{
			free(p[i][j]);
		}
	}
	
	for (i = 0; i < pen_num; i++)
	{
		free(p[i]);
	}
	free(p);
	p = NULL;
}

编译和运行:

g++ three_array.cpp -o three_array && ./three_array
5.230000 6.230000 7.230000 
6.230000 7.230000 8.230000 
7.230000 8.230000 9.230000 
8.230000 9.230000 10.230000 


6.230000 7.230000 8.230000 
7.230000 8.230000 9.230000 
8.230000 9.230000 10.230000 
9.230000 10.230000 11.230000 


7.230000 8.230000 9.230000 
8.230000 9.230000 10.230000 
9.230000 10.230000 11.230000 
10.230000 11.230000 12.230000 

发布了34 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sunny_xiaot/article/details/100114176