zoukankan      html  css  js  c++  java
  • 从内存角度理解指针和数组(三)

    1,不连续存储的数组——多维动态数组

    与前面所说的内建数组(编译阶段需确定空间,并连续开辟内存)不同,多维动态数组可以在程序运行时再从堆内存中申请空间。以三维动态数组为例,使用多维动态数组首先是定义一个多级指针,然后按照段、页、行的方式一层层地申请堆内存。虽然它们的行间、页间、段间并不是连续的(页内是连续的),却可以使用多级指针变量和中括号[]的方式来索引。值得注意的是:释放内存空间的次序刚好与申请的次序相反,按照行、页、段的次序。

    #include<stdio.h>
    #include<stdlib.h>
    #include<memory.h>
    void func1(void){
    	int i,j,z;
    	int ***p;
    	p = calloc(2,sizeof(int **));
    	p[0] = calloc(2, sizeof(int *));
    	p[1] = calloc(2, sizeof(int *));
    	p[0][0] = calloc(2,sizeof(int));
    	p[0][1] = calloc(2,sizeof(int));
    	p[1][0] = calloc(2,sizeof(int));
    	p[1][1] = calloc(2,sizeof(int));
    	p[0][0][0] = 19;
    	p[0][0][1] = 18;
    	p[0][1][0] = 17;
    	p[0][1][1] = 16;
    	p[1][0][0] = 15;
    	p[1][0][1] = 14;
    	p[1][1][0] = 13;
    	p[1][1][1] = 12;
    	for(i=0;i<2;i++)
    	  for(j=0;j<2;j++)
    		for(z=0;z<2;z++)
    		  printf("%d ",p[i][j][z]);
    	for(i=0;i<2;i++)
    	  for(j=0;j<2;j++)
    		  free(p[i][j]);
    	free(p[0]);
    	free(p[1]);
    	free(p);
    }
    int main(void){
    	printf("invoke func1:
    ");
    	func1();
    	printf("
    ");
    }
    invoke func1:
    19 18 17 16 15 14 13 12


  • 相关阅读:
    百度云满速下载原理与方法
    新版知乎登录之post请求
    requests发送post请求的一些疑点
    Python3实现ICMP远控后门(下)之“Boss”出场
    Python3实现ICMP远控后门(中)之“嗅探”黑科技
    Python3实现ICMP远控后门(上)_补充篇
    Python3实现ICMP远控后门(上)
    反射-Class
    希尔排序(java)
    插入排序(java)
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3395417.html
Copyright © 2011-2022 走看看