zoukankan      html  css  js  c++  java
  • c/c++多维数组动态分配与释放

    如果对数组指针与指针数组不明白可以参看http://blog.csdn.net/whzhaochao/article/details/12911785

    1.一维

    函数内部

    void main()
    {
    	int a[3]={1,2,3};
    	int *b;
    	b= new int[3];
    
    	b[0]=*a;
    	*(b+1)=a[1];
    	b[2]=*(a+2);
    
    	delete []b;
    
    } 
    

    函数外部

    void  newArray(int *&a,int *b){
    	a=new int[3];
    	a[0]=*b;
    	*(a+1)=b[1];
    	a[2]=*(b+2);
    }
    void deleteArray(int *&a){
    	delete []a;
    }
    
    void main(){
    
    		int a[3]={1,2,3};
    		int *b;
    		newArray(b,a);
    		deleteArray(b);
    }
    


    2.二维

    函数内部

    #include <stdio.h>
    
    void main()
    {
    	int a[][3]={
    		{1,2,3},
    		{4,5,6},
    		{7,8,9}
    	};
    
    	int (*p)[3]=new int[3][3];     //数据组指针
    	int *q[3];                     //指针数组
    
    	q[0]=a[0];
    	q[1]=a[1];
    	q[2]=a[2];
    
    //	p=a;
    	for (int i=0;i<3;i++)
    	{
    		for(int j=0;j<3;j++){
    			p[i][j]=a[i][j];
    		}
    	}
    
    	printf("
    %d ",sizeof(a));     //36
    	printf(" %d " ,sizeof(p));     //4
    	printf(" %d 
    " ,sizeof(*p));  //12
    
    	delete []p;
    } 
       

    函数外部

    void  newArray( int (*&p)[3],  int a[][3]){
    	p=new int[3][3];
    	for (int i=0;i<3;i++)
    	{
    		for(int j=0;j<3;j++){
    			p[i][j]=a[i][j];
    		}
    	}
    
    }
    void deleteArray( int (*&p)[3]){
    	delete []p;
    }
    
    void main()  
    {  
        int a[][3]={  
            {1,2,3},  
            {4,5,6},  
            {7,8,9}  
        };  
        int (*p)[3];
    	newArray(p,a);
    	deleteArray(p);
    
    
    }   
    


    3.三维

    函数内部

    void main()
    {
    	int (*p)[3][2] =new int[4][3][2];
    	for (int i=0;i<4;i++)
    	{
    		for (int j=0;j<3;j++)
    		{
    			for(int k=0;k<2;k++){
    				p[i][j][k]=i+j+k;
    				printf(" %d ",i+j+k);
    			}
    			printf("
    ");
    		}
    		printf("
    
    ");
    	}
    	delete []p;	
    } 

    函数外部

    void  newArray( int (*&p)[3][2]){
    	p=new int[4][3][2];
    	for (int i=0;i<4;i++)
    	{
    		for (int j=0;j<3;j++)
    		{
    			for(int k=0;k<2;k++){
    				p[i][j][k]=i+j+k;
    				printf(" %d ",i+j+k);
    			}
    			printf("
    ");
    		}
    		printf("
    
    ");
    	}
    
    }
    void deleteArray( int (*&p)[3][2]){
    	delete []p;
    }
    
    void main()
    {
    	int (*p)[3][2] ;
    	newArray(p);
    	deleteArray(p);
    } 
    


  • 相关阅读:
    @FeignClient同一个name使用多个配置类报错,解决方案【转+改进】
    spring cloud 与spring boot 版本不匹配引发的问题总结
    无聊系列
    基于redis+lua实现的分布式限流
    elasticsearch 优化笔记
    redis+lua库存扣减和冲正
    es-dsl笔记
    wiki—-Confluence搭建
    Linux常用命令
    SQLSERVER|CDC 日志变更捕获机制
  • 原文地址:https://www.cnblogs.com/whzhaochao/p/5023479.html
Copyright © 2011-2022 走看看