C++中的指针和动态分配二维数组问题
2016-03-11 20:52
453 查看
1. new int
和 new int(n)的区别?
int *p_data = new int(n) // 表示 指针p_data指向一个int型的数据(对象),这个数据初始化为n
int *p_data = new int
// 表示 分配一个长度为n的int型的数组,p_data指向这个数组
int *p_data = (int *)malloc(sizeof(int ) * n) // 等价于第二条语句
2. 动态分配二维数组方法——之一
首先,动态分配内存来定义一个指针数组(二级指针),然后为这个数组的每一个成员(指针)动态分配内存,让每一个成员指向一个一位数组,这样就等价于定义了一个二维数组。
测试代码如下:
测试结果如下:
![](https://img-blog.csdn.net/20160311211447300?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3. 动态分配二维数组方法——之二
这个方法的局限在于:数组的列要设置为const类型或者宏定义为常量
原理:首先动态分配一个一维数组,大小为目的二维数组的总大小,然后将这个一维数组强制转换成二维数组指针,这样就等于创建了一个二维数组。
测试代码如下:
测试结果如下:
![](https://img-blog.csdn.net/20160311214504995)
4. 指针数组与数组指针的区别
数组指针:如 int(*p)
表示 p 是一个指针,指向了一个二维数组。
指针数组:如int *p
表示 p 是一个数组,里面存放的是n个指针变量。
和 new int(n)的区别?
int *p_data = new int(n) // 表示 指针p_data指向一个int型的数据(对象),这个数据初始化为n
int *p_data = new int
// 表示 分配一个长度为n的int型的数组,p_data指向这个数组
int *p_data = (int *)malloc(sizeof(int ) * n) // 等价于第二条语句
2. 动态分配二维数组方法——之一
首先,动态分配内存来定义一个指针数组(二级指针),然后为这个数组的每一个成员(指针)动态分配内存,让每一个成员指向一个一位数组,这样就等价于定义了一个二维数组。
测试代码如下:
#include<iostream> #include<stdio.h> using namespace std; int main(){ int row = 10, col = 15; // 数组的行、列 int **p_data = new int*[row]; //动态分配一个指针数组(二级指针) for(int i = 0; i < row; i++){ //将数组的每一个成员(指针) 指向一个一维数组 p_data[i] = new int[col]; } for(int i = 0; i < row; i++){ // 给这个二维数组赋值 for(int j = 0; j < col; j++){ p_data[i][j] = i*j; } } for(int i = 0; i < row; i++){ // 打印出二维数组的每个成员 for(int j = 0; j < col; j++){ printf("%3d", p_data[i][j]); } printf("\n"); } for(int i = 0; i < row; i++){ // 释放指针数组中的每一个成员(指针) delete[] p_data[i]; p_data[i] = NULL; } delete[] p_data; // 最后释放这个指针数组 p_data = NULL; return 0; }
测试结果如下:
3. 动态分配二维数组方法——之二
这个方法的局限在于:数组的列要设置为const类型或者宏定义为常量
原理:首先动态分配一个一维数组,大小为目的二维数组的总大小,然后将这个一维数组强制转换成二维数组指针,这样就等于创建了一个二维数组。
测试代码如下:
#include <stdio.h> int main() { const int COL = 8; int row = 5; //申请一维数据并将其转成二维数组指针 int *p_data = new int[COL * row]; int (*pp_data)[COL] = (int(*)[COL])p_data; for(int i = 0; i < row; i++){ // 给这个二维数组赋值 for(int j = 0; j < COL; j++){ 4000 pp_data[i][j] = i*j; } } for(int i = 0; i < row; i++){ // 打印出二维数组的每个成员 for(int j = 0; j < COL; j++){ printf("%3d", pp_data[i][j]); } printf("\n"); } delete[] p_data; return 0; }
测试结果如下:
4. 指针数组与数组指针的区别
数组指针:如 int(*p)
表示 p 是一个指针,指向了一个二维数组。
指针数组:如int *p
表示 p 是一个数组,里面存放的是n个指针变量。
相关文章推荐
- 国外程序员整理的 C++ 资源大全
- sublime text 3 配置GCC G++编译C C++文件
- C++ Primer Plus (第六版)之旅 第二章
- C/C++ 记录时间
- 题目1448:Legal or Not
- 快速排序之c++实现
- 操作系统可变分区用C语言实现按首次适应算法分配内存
- iOSDay06C语言结构体
- 关于delete失败的问题
- C++细节总结
- C++ istringstream ostringstream stringstream 字符流操作函数
- C++ Primer Plus学习:第十五章
- C++ Primer Plus学习:第十四章
- C++ Primer Plus学习:第十三章
- C++ Primer Plus学习:第十一章
- C++ Primer Plus学习:第十章
- C++ Primer Plus学习:第九章
- C++ Primer Plus学习:第八章
- C++ Primer Plus学习:第七章
- C++ Primer Plus学习:第六章