动态分配内存创建三维数组
来源:互联网 发布:淘宝40磅反曲弓 编辑:程序博客网 时间:2024/05/01 03:24
/************************************************************************//* 假定三维数组是: MyInfo arrayInfo[2][3][4]; *//************************************************************************/typedef struct tagMyInfo{unsigned char ucInfo1;unsigned char ucInfo2;}MyInfo;int iMax = 2;int jMax = 3;int kMax = 4;int i = 0;int j = 0;int k = 0;MyInfo ***pppMyInfo = (MyInfo ***)malloc(iMax*jMax*kMax*sizeof(MyInfo) + iMax*jMax*sizeof(MyInfo*));/*初始化*/for (i=0; i<iMax; i++){pppMyInfo[i] = (MyInfo**)((char*)pppMyInfo + iMax*sizeof(MyInfo*) + i*jMax*kMax*sizeof(MyInfo));for (j=0; j<jMax; j++){pppMyInfo[i][j] = (MyInfo*)((char*)(pppMyInfo[i]) + jMax*sizeof(MyInfo*) + j*kMax*sizeof(MyInfo));for (k=0; k<kMax; k++){memset(pppMyInfo[i][j]+k, 0, sizeof(MyInfo));}}}/*像静态数组一样使用*/pppMyInfo[0][0][0].ucInfo1 = 0;pppMyInfo[0][0][0].ucInfo2 = 1;pppMyInfo[1][2][3].ucInfo1 = 23;pppMyInfo[1][2][3].ucInfo2 = 24;printf("\r\n %u, %u", pppMyInfo[0][0][0].ucInfo1, pppMyInfo[0][0][0].ucInfo2);printf("\r\n %u, %u", pppMyInfo[1][2][3].ucInfo1, pppMyInfo[1][2][3].ucInfo2);/************************************************************************//* 二维数组也是同样,更简单一点; *//************************************************************************/MyInfo **ppMyInfo = (MyInfo **)malloc(iMax*jMax*sizeof(MyInfo) + iMax*sizeof(MyInfo*));/*初始化*/for (i=0; i<iMax; i++){ppMyInfo[i] = (MyInfo*)((char*)ppMyInfo + iMax*sizeof(MyInfo*) + i*jMax*sizeof(MyInfo));for (j=0; j<jMax; j++){memset(ppMyInfo[i]+j, 0, sizeof(MyInfo));}}/*像静态数组一样使用*/ppMyInfo[0][0].ucInfo1 = 0;ppMyInfo[0][0].ucInfo2 = 1;ppMyInfo[1][2].ucInfo1 = 5;ppMyInfo[1][2].ucInfo2 = 6;printf("\r\n %u, %u", ppMyInfo[0][0].ucInfo1, ppMyInfo[0][0].ucInfo2);printf("\r\n %u, %u", ppMyInfo[1][2].ucInfo1, ppMyInfo[1][2].ucInfo2);free(pppMyInfo); free(ppMyInfo);
今天用到了3级指针,其实工作中还是很少使用这种东西的,尤其是我现在的工作对于编程技巧要求不高,相对的行业专业性知识和业务能力更重要;
记得当初找工作时还有公司笔试过类似的题,就顺便贴出来,希望对有需要的人能有所帮助,折腾明白这个,对指针就应该有一个较好的掌握了;
当然,实现方式不唯一,比如可以针对每个一维数组分多次申请内存,也可以像下面这样做一下调整
/************************************************************************//* 还可以将用于存放中间指针地址的内存并在一起,这样数据元素能连续存放 *//************************************************************************/for (i=0; i<iMax; i++){pppMyInfo[i] = (MyInfo**)((char*)pppMyInfo + iMax*jMax*sizeof(MyInfo*) + i*jMax*kMax*sizeof(MyInfo));for (j=0; j<jMax; j++){pppMyInfo[i][j] = (MyInfo*)((char*)(pppMyInfo[i]) + j*kMax*sizeof(MyInfo));for (k=0; k<kMax; k++){memset(pppMyInfo[i][j]+k, 0, sizeof(MyInfo));}}}
- 动态分配内存创建三维数组
- c++动态分配二维/三维数组的内存
- 动态分配三维数组
- 动态分配内存方式创建二维数组
- C++动态分配二维/三维数组
- 如何动态分配二、三维数组
- C实现动态分配三维数组
- 二维数组动态分配内存
- 二维数组动态分配内存
- 二维数组动态分配内存
- 二维数组动态分配内存
- 二维数组动态分配内存
- 二维数组动态分配内存
- 二维指针与三维指针动态分配内存
- C++ 三维数组的理解与动态分配
- 多维数组的动态分配(二三维)
- 创建一个三维数组
- 创建一个三维数组
- sql中的字符串匹配、函数大全
- iOS5系统API和5个开源库的JSON解析速度测试
- NANDflash和NORflash的区别
- Programming with libpcap,待续。。。
- HTTP协议详解
- 动态分配内存创建三维数组
- andriod 开发环境 SDL init failure, reason is: No available video device错误
- JAVA基础面试题
- ubuntu 下find命令的使用
- Android SDCard操作(文件读写,容量计算)
- 学习Java的一些反思和以后该如何继续Java征途
- 2011.11.24
- 归并排序
- XBOX 360游戏开发