动态分配多维数组

//在堆中开辟一个4×5的二维int数组
2.#include <stdio.h>
3.#include <malloc.h>
4.int **p;
5.int i,j;
6.void main() {
7.    p=(int **)malloc(4*sizeof(int *));
8.    if (NULL==p) return;
9.    for (i=0;i<4;i++) {
10.        p[i]=(int *)malloc(5*sizeof(int));
11.        if (NULL==p[i]) return;
12.    }
13.    for (i=0;i<4;i++) {
14.        for (j=0;j<5;j++) {
15.            p[i][j]=i*5+j;
16.        }
17.    }
18.    for (i=0;i<4;i++) {
19.        for (j=0;j<5;j++) {
20.            printf(" %2d",p[i][j]);
21.        }
22.        printf("\n");
23.    }
24.    for (i=0;i<4;i++) {
25.        free(p[i]);
26.    }
27.    free(p);
28.}
29.//  0  1  2  3  4
30.//  5  6  7  8  9
31.// 10 11 12 13 14
32.// 15 16 17 18 19
33.
34.//在堆中开辟一个3×4×5的3维int数组
35.#include <stdio.h>
36.#include <malloc.h>
37.int ***p;
38.int i,j,k;
39.void main() {
40.    p=(int ***)malloc(3*sizeof(int **));
41.    if (NULL==p) return;
42.    for (i=0;i<3;i++) {
43.        p[i]=(int **)malloc(4*sizeof(int *));
44.        if (NULL==p[i]) return;
45.        for (j=0;j<4;j++) {
46.            p[i][j]=(int *)malloc(5*sizeof(int));
47.            if (NULL==p[i][j]) return;
48.        }
49.    }
50.    for (i=0;i<3;i++) {
51.        for (j=0;j<4;j++) {
52.            for (k=0;k<5;k++) {
53.                p[i][j][k]=i*20+j*5+k;
54.            }
55.        }
56.    }
57.    for (i=0;i<3;i++) {
58.        for (j=0;j<4;j++) {
59.            for (k=0;k<5;k++) {
60.                printf(" %2d",p[i][j][k]);
61.            }
62.            printf("\n");
63.        }
64.        printf("---------------\n");
65.    }
66.    for (i=0;i<3;i++) {
67.        for (j=0;j<4;j++) {
68.            free(p[i][j]);
69.        }
70.        free(p[i]);
71.    }
72.    free(p);
73.}
74.//  0  1  2  3  4
75.//  5  6  7  8  9
76.// 10 11 12 13 14
77.// 15 16 17 18 19
78.//---------------
79.// 20 21 22 23 24
80.// 25 26 27 28 29
81.// 30 31 32 33 34
82.// 35 36 37 38 39
83.//---------------
84.// 40 41 42 43 44
85.// 45 46 47 48 49
86.// 50 51 52 53 54
87.// 55 56 57 58 59
88.//---------------
89.
90.//在堆中开辟一个2×3×4×5的4维int数组
91.#include <stdio.h>
92.#include <malloc.h>
93.int ****p;
94.int h,i,j,k;
95.void main() {
96.    p=(int ****)malloc(2*sizeof(int ***));
97.    if (NULL==p) return;
98.    for (h=0;h<2;h++) {
99.        p[h]=(int ***)malloc(3*sizeof(int **));
100.        if (NULL==p[h]) return;
101.        for (i=0;i<3;i++) {
102.            p[h][i]=(int **)malloc(4*sizeof(int *));
103.            if (NULL==p[h][i]) return;
104.            for (j=0;j<4;j++) {
105.                p[h][i][j]=(int *)malloc(5*sizeof(int));
106.                if (NULL==p[h][i][j]) return;
107.            }
108.        }
109.    }
110.    for (h=0;h<2;h++) {
111.        for (i=0;i<3;i++) {
112.            for (j=0;j<4;j++) {
113.                for (k=0;k<5;k++) {
114.                    p[h][i][j][k]=h*60+i*20+j*5+k;
115.                }
116.            }
117.        }
118.    }
119.    for (h=0;h<2;h++) {
120.        for (i=0;i<3;i++) {
121.            for (j=0;j<4;j++) {
122.                for (k=0;k<5;k++) {
123.                    printf(" %3d",p[h][i][j][k]);
124.                }
125.                printf("\n");
126.            }
127.            printf("--------------------\n");
128.        }
129.        printf("=======================\n");
130.    }
131.    for (h=0;h<2;h++) {
132.        for (i=0;i<3;i++) {
133.            for (j=0;j<4;j++) {
134.                free(p[h][i][j]);
135.            }
136.            free(p[h][i]);
137.        }
138.        free(p[h]);
139.    }
140.    free(p);
141.}
142.//   0   1   2   3   4
143.//   5   6   7   8   9
144.//  10  11  12  13  14
145.//  15  16  17  18  19
146.//--------------------
147.//  20  21  22  23  24
148.//  25  26  27  28  29
149.//  30  31  32  33  34
150.//  35  36  37  38  39
151.//--------------------
152.//  40  41  42  43  44
153.//  45  46  47  48  49
154.//  50  51  52  53  54
155.//  55  56  57  58  59
156.//--------------------
157.//=======================
158.//  60  61  62  63  64
159.//  65  66  67  68  69
160.//  70  71  72  73  74
161.//  75  76  77  78  79
162.//--------------------
163.//  80  81  82  83  84
164.//  85  86  87  88  89
165.//  90  91  92  93  94
166.//  95  96  97  98  99
167.//--------------------
168.// 100 101 102 103 104
169.// 105 106 107 108 109
170.// 110 111 112 113 114
171.// 115 116 117 118 119
172.//--------------------
173.//=======================
174.//  

另一篇文章: http://blog.csdn.net/supermegaboy/article/details/4854899

时间: 2024-08-26 10:52:29

动态分配多维数组的相关文章

C语言动态分配二维数组内存

C语言内存管理主要包括malloc().remalloc().free()三个函数. malloc原型 extern void *malloc(unsigned int num_bytes); m行n列的 二维数组的分配,主要有三种方法: 一.分配一个长度为m的二级指针,指针的指向的内容分别指向一个长度为n的一位数组 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h>

malloc动态分配多维数组

下面试自己写的三个测试程序,如果看懂了基本上动态分配多维数组就没什么问题啦:重点 1:深刻理解多维数组的概念,多维数组在内存中的分配情况,基本上动态分配也没什么问题的.然后还要注意一点的就是,释放是分配的逆过程!!! #include <stdio.h> #include <malloc.h> #include <string.h> void main(void) { int i ; char (*p)[12] ; //[5][12] p = malloc(5 * si

C语言如何动态分配二维数组

C语言如何动态分配二维数组 使用malloc().free()函数进行动态分配,这两个函数包含于stdlib.h或malloc.h中 假如要申请一个3行5列的二维数组内存 1 #include <stdlib.h> 2 int main() 3 { 4 // 为二维数组分配3行 5 int **a = (int **)malloc(3 * sizeof(int *)); 6 // 为每行分配5列 7 for(int i = 0; i < 3; i++) 8 { 9 a[i] = (int

c++ 动态分配二维数组 new 二维数组

#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //建立一个16行5列的数组 int **p = new int*[16];//分配堆内存16个 int* for(int i = 0;i < 16;i++)//分配堆内存给每一个int* p[i] = new int[5]; //给这个数组赋值 int k = 0; f

动态分配二维数组

int m=10,n=5; int **c=new int*[m];//分配m个指针的空间 for(int i=0;i<m;i++) c[i]=new int[n];//每个指针指向存储n个整型的空间首地址 for(int i=0;i<m;i++) delete []c[i]; delete []c;

动态分配二维数组指针

#include <stdio.h> #include <stdlib.h> void main() { int **pp = (int **)malloc(sizeof(int *)* 5); int num = 0; for (int i = 0; i < 5; i++) { pp[i] = (int *)malloc(sizeof(int)* 5); for (int j = 0; j < 5; j++) { printf("%4d", pp[

【转载】二维数组的动态分配和参数传递

本篇随笔为转载,原贴地址:http://www.cnblogs.com/bigshow/archive/2009/01/03/1367661.html. 1. C语言动态分配二维数组 (1)已知第二维 Code-1 char (*a)[N];//指向数组的指针 a = (char (*)[N])malloc(sizeof(char *) * m); printf("%d\n", sizeof(a));//4,指针 printf("%d\n", sizeof(a[0]

C语言 二维数组(指针)动态分配和释放(转)

C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按照16位.32位.64位为单位进行编辑的话:旧的16位处理器,比如Intel 80286 CPU需要8个指令,32位的处理器需要4个指令,而64位处理器则只要两个指令,显然,在工作频率相同的情况下,64位处理器的处理速度会比16位.32位的更快.而且除了运算能力之外,与32位处理器相比,64位处理器

二维数组指针及二维动态数组的分配问题

在我以前的文章中都有讲过关于数组指针及指针数组的相关问题,但是讲得不够深入,我后来后了别人写的博客后觉得人家的确实写得好, 也学到了不少东西,对以前的问题有深的领悟了,于是准备结合这些博客和文章再稍微深入一点讲讲这些问题.这些指针的问题是C语言中的基础与关键 而且一旦出现这些问题,不太好找bug的来源,有时候不得不借助反汇编. 参考文章: http://c.biancheng.net/cpp/html/476.html       C语言指针数组和数组指针 http://blog.csdn.ne