5指针

Posted gaoyixue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5指针相关的知识,希望对你有一定的参考价值。

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指针的主要内容,如果未能解决你的问题,请参考以下文章

详解指针数组数组指针函数指针

关于二级指针与一级指针相互转换的问题!

C语言进阶5——指针的进阶

指针数组和数组指针

指针数组数组指针函数指针指针函数总结

06指针.