【c++】初识指针[new&malloc]
来源:互联网 发布:文明5 mac 中文 编辑:程序博客网 时间:2024/06/10 07:39
一.new 的几种基本用法
1.创建一个动态变量
int *p;
p=new int; //new int 操作时的在堆区产生一个int型的动态变量,结果为该动态变量的地址(或指针)。
*p=1;
2.创建一个一维n位动态数组
int *p;
int n;
p=new int[n]; // 操作在程序的堆区中产生一个动态的一维数组,数组元素的类型是int,返回值为数组的首地址。
3.创建一个n*20的动态数组
int (*q)[20]; //定义q为一个指向20个int型元素所构成的一维数组的指针。 等价于 typedef int A[20]; A* q;
q=new int[n][20]; //上面这一段会产生error,因为 无法从int (*)[20]转化为 int *;
4.创建一个m*n的动态数组
int m,n;
cin>>m>>n;
int **p = new int*[n];
for (int i=0; i<n; ++i)
p[i] = new int[m]; //定义一个n*m的二维动态数组
二.malloc的用法
1.malloc在 cstdlib中声明,在程序的堆区中分配一块大小为size的内存空间,并返回该内存空间的的首地址。
2.malloc 函数原型:
void *malloc(unsigned int size);
3.具体使用
int *p;
p=(int *)malloc(sizeof(int)); //创建一个int型的动态变量
double *q;
int n;
q=(double *)malloc(sizeof(double)*n);//创建一个由n个double型元素组成的一位动态数组
typedef int A[20];
int *q=(int *)malloc(sizeof(int)*20); //创建一个n行,20列的动态二维数组变量
三.new与delete的区别
1.new自动计算所需分配空间的大小,delete需要显式的指出。
2.new自动返回相应类型的指针,delete需要做强制类型的转化。
3.如果创建的是动态对象,new会去调用相应对象类的构造函数,而malloc不会。
四.动态数组的撤销
1.new创建的delete使之消亡,malloc创建的free使之消亡。
2.delete格式如下:
int *p=new int;
delete p;
int *p=new int[20];
delete[]p;
3.free的格式如下:
int *p=(int *)malloc(sizeof(int));
int *q=(int *)malloc(sizeof(int)*20);
free(p);
free(q);
4.delete与free的区别
如果p指向的是对象(或对象数组),则delete p(或delete []p)回去调用对象类的析构函数,而free不会。
5.悬浮指针(dangling pointer)
撤销后,c++编译程序一般不会把指向它的指针变量的值赋为NULL,这样就产生了一个悬浮指针,它指向一个无效的空间。在通过这个悬浮指针来使用相应的动态变量就会产生语义错误。
6.内存泄漏(memory leak)
如果不去撤销它,而指向了别的地方,那个空间就会浪费掉。
- 【c++】初识指针[new&malloc]
- c/c++ new 与malloc
- C/C++ new与malloc()
- c/c++ 复习基础要点01-const指针、指针函数 函数指针、new/delete与malloc/free区别与联系
- 关于在MFC中添加C文件 + 关于 new 和 malloc + 静态局部变量指针
- 一级二级指针new、delete、malloc、free
- [C学习]指针初识
- 初识c指针
- C++:初识智能指针
- C指针初识
- C语言 初识指针
- C指针与malloc,free
- c编码--指针/malloc/free
- 迷途指针和空指针,malloc /new区别
- C++malloc/free和new/delete
- C/C++中 malloc和new区别
- c中malloc与new的区别
- C/C++中 malloc和new区别
- ListCtrl控件中的数据保存到EXCEL
- 跨越DLL边界传递CRT对象潜在的错误
- unresolved external symbol _RtlStringVPrintfWorkerW 驱动函数链接错误解决
- Asp.net 之TreeView重要
- C#_设置文件夹访问权限
- 【c++】初识指针[new&malloc]
- WINDOWS 同步
- js弹出窗口详解
- java中重定向和转发的差别
- 例题3-6
- #遍历E盘下的mp3文件
- UVa 11992 - Fast Matrix Operations 成段更新,求最值与和
- Liferay安装笔记(默认安装使用Mysql数据库)
- webkit 中 javascript 与 WebCore DOM 的绑定