动态申请二维数组两种方法
2016-08-23 15:30
302 查看
#include <iostream> int main() { int row = 4; int col = 4; //1. 动态申请二维数组(内存连续),前提要知道列数,这里是三列 int (*a)[3] = (int (*)[3])malloc(row * 3 * sizeof(int));//int (*a)[3] = (int (*)[3])malloc(row * sizeof(int[3]));效果一样//[]中必须是常量 //1~9赋值 for (int i = 0; i < row; i++) { for (int j = 0; j < 3; j++) { static int val = 1; a[i][j] = val; val++; std::cout << a[i][j] << '\t'; } std::cout << std::endl; } //释放 free(a); //用new实现 int (*a2)[3] = new int[row][3]; for (int i = 0; i < row; i++) { for (int j = 0; j < 3; j++) { static int val = 1; a2[i][j] = val; val++; std::cout << a2[i][j] << '\t'; } std::cout << std::endl; } delete [] a2; //2. 二重指针模拟二维数组,列数可以是变量,这其实不是严格意义上的二维数组 int ** b = (int **)malloc(row * sizeof(int *)); for (int i = 0; i < row; i++) { b[i] = (int *)malloc(col * sizeof(int));//列数为3,同理可以生成锯齿数组 } //1~9赋值 for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { static int val = 1; b[i][j] = val; val++; std::cout << b[i][j] << '\t'; } std::cout << std::endl; } //释放 for (int i = 0; i < row; i++) { free(b[i]); } free(b); //用new实现 int ** b2 = new int*[row]; for (int i = 0; i < row; i++) { b2[i] = new int[col]; } for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { static int val = 1; b2[i][j] = val; val++; std::cout << b2[i][j] << '\t'; } std::cout << std::endl; } for (int i = 0; i < row; i++) { delete [] b2[i]; } delete [] b2; return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 如何组织构建多文件 C 语言程序(二)
- 关于指针的一些事情
- 如何写好 C main 函数
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua和C语言的交互详解
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解