码迷,mamicode.com
首页 > 其他好文 > 详细

5、指针

时间:2019-09-04 18:58:30      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:编译   end   长度   赋值   相同   malloc   code   数组   style   

1、指针的创建

【1】在C++创建指针时,计算机将分配用于存储地址的内存,而不是分配用来存储指针所指向数据的内存。

【2】在使用*访问变量之前,将指针初始化成一个确定的、适当的地址。

【3】要将数字值作为地址来使用,应该通过强制类型转换将数字转换成指针类型。

int *pt;
pt = 0xB8000000;//出错
pt = (int *)0xB8000000;//valid

2、使用new来分配内存

在C里面,使用malloc分配内存,C++里面还可以使用new.

new找到一个长度正确的内存块并返回该内存块的地址,程序员则需要将该地址赋值给一个指针。

int *pn=new int;

new int告诉程序,需要适合存储int的内存,new运算符根据类型来确定需要多少字节的内存、找到这样的内存并返回地址。

pn指向的内存块没有名字,如何称呼呢,我们说pn指向一个数据对象(这里指内存块而不是变量)。

3、使用delete释放内存

int *ps = new int;
delete ps;
/*以上语句将释放ps指向的内存,但不会删除指针ps本身,
可以将ps指向另一个新分配的内存块*/

int *ps2 = new int;
int *pt = ps;//一般来说不要创建指向同一个内存块的指针
//将增加错误地删除同一个内存块的风险
return 0;

4、使用new来创建动态数组

/*在编译时给数组分配内存称为静态联编(static binding,意味着数组是在编译时加入程序。
使用new时,如果在运行阶段需要数组则创建,还可以在运行时选择数组长度,称为动态联编。
在运行时创建的数组叫做动态数组。
*/
int *psome = new int[10];//new元素返回第一个元素的地址,并赋给psome
delete[]psome;//使用方括号告诉程序,应该释放整个数组而不是指针指向的元素
  • 不能使用delete释放不是new分配的内存
  • 不能使用delete释放同一个内存块两次
  • 若使用new []为数组分配内存,应该使用delete []
  • 若使用new []为一个实体分配内存,应该使用delete
  • 对空指针使用delete是安全的
short tell[10];
cout << tell << endl;
cout << &tell << endl;

从数字上说,tell与&tell相同;但从概念上,tell指&tell[0]是一个2字节内存块的地址,&tell是20字节内存块的地址。tell+1将地址增加2,&tell+1将内存地址加20。

tell是一个short指针(*short),而&tell是指向包含20个元素的short数组(short(*)[20]).

 

5、指针

标签:编译   end   长度   赋值   相同   malloc   code   数组   style   

原文地址:https://www.cnblogs.com/gaoyixue/p/11460853.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!