malloc动态分配多维数组

下面试自己写的三个测试程序,如果看懂了基本上动态分配多维数组就没什么问题啦:重点 1:深刻理解多维数组的概念,多维数组在内存中的分配情况,基本上动态分配也没什么问题的。然后还要注意一点的就是,释放是分配的逆过程!!!

#include <stdio.h>

#include <malloc.h>

#include <string.h>

void main(void)

{

int i ;

char (*p)[12] ; //[5][12]

p = malloc(5 * sizeof(char ) * 12);     //申请5行的地址空间

for(i = 0 ; i < 5 ; i++)

{

strcpy(*(p + i), "hello");

}

for(i = 0 ; i < 5 ;i++)

{

printf("%s\n" , *(p + i));

}

free(p);

}

程序2:

#include <stdio.h>

#include <malloc.h>

#include <string.h>

void main(void)

{

int i;

int j ;

int num = 0 ;

char **p ;//[5][12]

p =(char **) malloc( 5 * sizeof(char *) );

for(i = 0 ; i < 5 ; i++)

{

p[i] = malloc(12 * sizeof(char));

}

for(j = 0 ; j < 5 ; j++)

{

num = 0 ;

for(i = 0 ; i < 12 ; i++)

{

p[j][i] = ‘a‘ + num;

num++ ;

}

}

for(j = 0 ; j < 5 ; j++)

{

for(i = 0 ; i < 12 ; i++)

{

printf("%c" , p[j][i]);

}

printf("\n");

}

for(i = 0 ; i < 5 ; i++)

{

free(p[i]);

}

free(p);

}

程序3:

#include <stdio.h>

#include <malloc.h>

#include <string.h>

void main(void)

{

char ***pStr;

int i , j , k ;

// 自己分配一个三维的[3][4][5]

pStr = (char ***)malloc(3 * sizeof(char **));      //第一维

//分配二维的

for(i = 0 ; i < 3 ; i++)

{

*(pStr + i) = malloc(4 * sizeof(char *));

}

//分配三维

for(i = 0 ; i < 3 ; i++)

{

for(j = 0 ; j < 4 ; j++)

{

*(*(pStr + i) + j) = malloc(5 * sizeof(char));

}

}

//使用分配的内存

for(i = 0 ; i < 3 ; i++)

{

for(j = 0 ; j < 4 ; j++)

{

for(k = 0 ; k < 5 ; k++)

{

pStr[i][j][k] = ‘a‘ ;

printf("%c" , pStr[i][j][k]);

}

printf("\n");

}

}

//释放第三维的内存

for(i = 0 ; i < 3 ; i++)

{

for(j = 0 ; j < 4 ;j++)

{

free((pStr[i][j]));

}

}

//释放第二维的内存

for(i = 0 ; i < 3 ; i++)

{

free(pStr[i]);

}

//释放第一维的内存

free(pStr);

}

时间: 2024-10-10 07:42:16

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

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>

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

动态分配多维数组

//在堆中开辟一个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==

动态分配二维数组指针

#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[

使用malloc分配二维数组的两种方法

方法一: #include <malloc.h> #include <stdio.h> int main() { int **a = malloc(sizeof(int)*3); a[0]= malloc(sizeof(int)*2); a[1]= malloc(sizeof(int)*2); a[2]= malloc(sizeof(int)*2); a[0][0] =1; a[0][1] =2; a[1][0] =3; a[1][1] = 4; a[2][0] =5; a[2][

动态分配二维数组

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;

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

本篇随笔为转载,原贴地址: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位处理器