本站启用国内永久域名: www.LewenSky.cn,请大家使用新域名访问网站!
3月18

c和c++分别实现动态分配二、三维数组(转)

| |
10:09C/C++  From: My space
本文主要目的是用c和c++分别实现动态分配二、三维数组。一般而言,在C中用malloc和free实现,而在C++中用new和delete。 new和delete是c++操作符,malloc和free是c语言函数,它们都可以用来为对象动态分配空间,最大的区别在于:当用new和 delete为对象分配空间或delete对象时,将缺省的调用对象的构造函数及析购函数,而malloc和free是原来c库中的函数,显然没有这项功 能,因此,在c++中,最好使用new和delete。

动态分配二维数组的程序
//////////////c用malloc和free//////////////////////////////
#include   "stdio.h"  
#include   "stdlib.h"  

void   main()  
{  
    
int **p;  
    
int i,j;
//p[4][8]
    //开始分配4行8列的二维数据  
    
p = (int**)malloc(sizeof(int*)*4);  
    
for(i=0; i<4; i++)  
        
p[i] = (int*)malloc(sizeof(int)*8);
    
    
for(i=0; i<4; i++)  
        
for(j=0; j<8; j++)  
            
p[i][j] = j*i;  
        
//打印数据  
        
for(i=0; i<4; i++)  
            
for(j=0; j<8; j++)    
            {  
                
if(j==0) printf("\n");  
                
printf("%3d",p[i][j]);  
            }  
            
//开始释放申请的堆  
            
for(i=0; i<4; i++)  
                
free(p[i]);  
            
free(p);  
            
}
///////////////////////////////////////////////////////////

//////////////c++用new和delete/////////////////////////////
#include <iostream>
using namespace std;  

void main()  
{  
    
int **p;  
    
int i,j;  
//p[4][8]
    //开始分配4行8列的二维数据  
    
p = new int *[4];
    
for(i=0;i<4;i++)
        
p[i]=new int [8];
    
    
for(i=0; i<4; i++)  
        
for(j=0; j<8; j++)  
            
p[i][j] = j*i;  
        
//打印数据  
        
for(i=0; i<4; i++)  
            
for(j=0; j<8; j++)    
            {  
                
if(j==0) cout<<endl;  
                
cout<<p[i][j]<<"\t";  
            }  
            
//开始释放申请的堆  
            
for(i=0; i<4; i++)  
                
delete [] p[i];  
            
delete [] p;  
}
///////////////////////////////////////////////////////////


动态分配三维数组的程序
//////////////c用malloc和free//////////////////////////////
#include   "stdlib.h"  
#include   "stdio.h"  

void main()  
{  
    
int i,j,k;  
//p[2][3][4]
    
    
char ***p = (char***)malloc(2* sizeof(char**));  
    
for(i=0; i<2; i++)  
    {    
        
p[i] = (char**)malloc(3*sizeof(char*));  
        
for(j=0; j<3; j++)  
        {  
            
p[i][j] = (char*)malloc(4*sizeof(char));  
        }  
    }
    
    
//finish creating use p[i][j][k] to access the data  
    
for(i=0; i<2; i++)  
    {
        
for(j=0; j<3; j++)  
        {
            
for(k=0;k<4;k++)
            {
                
p[i][j][k]=i+j+k;
                
printf("%d ",p[i][j][k]);
            }
            
printf("\n");
        }
        
printf("\n");
    }
    
    
//free the memory  
    
for(i=0; i<2; i++)
    {
        
for(j=0; j<3; j++)
        {  
            
free(p[i][j]);  
        }  
    }      
    
for(i=0; i<2; i++)  
    {      
        
free(p[i]);  
    }  
    
free(p);  
    
}
///////////////////////////////////////////////////////////


//////////////c++用new和delete/////////////////////////////
#include <iostream>
using namespace std;  

void main()  
{  
    
int i,j,k;  
// p[2][3][4]
    
    
int ***p;
    
p = new int **[2];
    
for(i=0; i<2; i++)
    {
        
p[i]=new int *[3];
        
for(j=0; j<3; j++)
            
p[i][j]=new int[4];
    }
    
    
//finish creating use p[i][j][k] to access the data  
    
for(i=0; i<2; i++)  
    {
        
for(j=0; j<3; j++)  
        {
            
for(k=0;k<4;k++)
            {
                
p[i][j][k]=i+j+k;
                
cout<<p[i][j][k]<<" ";
            }
            
cout<<endl;
        }
        
cout<<endl;
    }
    
    
//free the memory  
    
for(i=0; i<2; i++)
    {
        
for(j=0; j<3; j++)
        {  
            
delete [] p[i][j];  
        }  
    }      
    
for(i=0; i<2; i++)  
    {      
        
delete [] p[i];  
    }  
    
delete [] p;  
    
}
///////////////////////////////////////////////////////////


出处:My space
转载时必须以链接形式注明出处及本声明!


最新日志 随机日志 综合排行
  • OFFICE 2010 VOL...
  • 格式工厂绿色版 V2.90
  • Password Invent...
  • VideoCacheView ...
  • 电脑店U盘启动盘制作工具 3....
  • 阿里旺旺AliIM2011_7...
  • 极点五笔十周年纪念版
  • PPTV网络电视3.1.1.0...
  • WinRAR注册方法
  • 紫光华宇拼音输入法 6.8.0...
  • QQ音乐2010 V7.72....
  • 9张海报,激励人生
  • PotPlayer V1.5 ...
  • 飞信2010 Beta4.0 ...
  • 金山打字通 2010 简体中文...
  • PPS网络电视v2.7.0.1...
  • 歪歪语音 V2.1.8 SP1...
  • 飞信2011秋韵版 4.5.2...
  • 魔影工厂(Winavi Vid...
  • 名词解释: 域名解析 泛域名解...
  • 安装软件时出现系统提示&quo...
  • XP与XP无线共享设置(笔记本...
  • ZineMaker目录模板大集...
  • 没有不可能 轻松实现PDG转P...
  • CString转char的方法...
  • [转]MSDN精简版、MSDN...
  • 将IE、FIREFOR (火狐...
  • VC多线程编程(转)
  • MyEclipse6.5下载地...
  • Diskeeper 2010 ...
  • Tags: ,
    阅读(3096) | 评论(1) | 引用(0)
    郁_诗
    2010/06/11 12:33
    呵呵!厉害@@@
    分页: 1/1 第一页 1 最后页
    发表评论
    表情
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    打开HTML
    打开UBB
    打开表情
    隐藏
    记住我
    昵称   密码   游客无需密码
    网址   电邮   [注册]