指针

用于存储值得地址。指针名表示的是地址。*运算符称为间接值或接触引用运算符,得到该地址处存储的值。

一般来说地址需要几个字节取决于计算机系统。

声明与初始化

1 int *ptr;//c风格
2 int* ptr;//c++风格,强调*ptr是一个int类型的值

*两边的空格是可选的。

c++中,int*是一种复合类型,是指向int的指针。


 

声明中初始化

1 int higgens == 5;
2 int* ptr = &higgens;

一定要在对指针应用解除引用运算符*之前,将指针初始化为一个确定的,适当的地址。


强制类型转换为指针

要将数字值作为地址来使用,通过强制类型转换将数字转换为适当的地址类型:

1 int* ptr;
2 ptr = (int*) 0xB8000000;

使用new来分配内存

typename * pointer_name = new typename

告诉new需要为哪种数据类型分配内存,new将找到正确内存块,返回该内存块的地址。

c++中值为0的指针,被称为空指针 Null pointer。


使用delete释放内存

当需要内存是,使用new请求。使用完内存后,使用delete将其归还给内存池。

int* ptr = new int;
......
delete ptr;//释放ptr指向的内存,不删除指针ptr本身

只能用delete来释放使用new分配的内存,对空指针使用delete是合法的。


 

指针和数组

  • 静态联编:编译时给数组分配内存;
  • 动态联编:使用new,运行阶段需要时创建,不需要时不创建。

使用new创建动态数组:

int* psome = new int [10];//必须在类型后加上括号,表示元素数目

//new返回第一个元素的地址

当程序使用完new分配的内存时,使用delete来释放:

delete [] psome;

//方括号告诉程序,释放整个数组

//如果使用new不带方括号,使用delete也不带,两者要匹配。

指针当做数组名即:

*psome指向第一个元素的值,也可以是psome[0]

psome是数组第一个元素的地址,psome+1后就到了第二个元素的地址,这里增加的量就等于它指向的类型的字节。


 

如果给cout提供一个字符的地址,它将从该字符开始打印,知道遇到空字符为止。

用引号括起来的字符串像数组名一样,也是第一个元素的地址。

 

posted @ 2019-06-04 15:48  Austin_anheqiao  阅读(134)  评论(0编辑  收藏  举报