本文已参与[新人创作礼]活动,一起开启掘金创作之路。 上一节我们介绍了使用string类来操作字符串,这一节我们将一起来了解C++指针。
1.创建和使用指针
首先我们先了解一下什么是指针。所谓指针,其实就是一个变量,这个变量里面存放的不是具体的数值而是一个存储地址。例如定义一个常规变量home=5;那么home是变量,&home是变量home的地址。使用常规变量时,地址是附加的,而使用指针时主要内容是地址,地址里面存储的数据是附加的,次要的,需要另外标记的。
指针,也就是地址变量的定义需要*来帮助。示例代码如下:
#include<iostream>
int main(){
using namespace std;
int a=1;
int *b;
b=&a;
cout<<"a"<<a<<endl;
cout<<"b"<<b<<endl;
cout<<"*b"<<*b<<endl;
*b=*b+1;
cout<<"*b"<<*b<<endl;
cout<<"a"<<a<<endl;
}
在上面的代码里面,b是一个地址,地址不能直接定义,需要简洁通过*来定义,*b表示地址b里面的内容,int表示这个地址里面的内容是int类型,也就是说我需要给int准备大小合适的空间,其他类型也是类似。上述代码a赋值为1,b是一个指针变量被赋值为a的地址。*b+1就是地址b里面的内容加一,也就是a+1,这个时候a的内容就被更新了。
另外补充一点,*两边的空格是可选的,也就是说int * a;int *a;int * a;int*a;是一样的,并没有区别,都是定义了一个指针a,注意*a 是int,a是指针。
2.使用new分配内存
int *a=new int;
上面代码干了两件事,一是new创建了或者说申请了一块内存,内存大小是int,new返回的是一个地址;int *a创建了一个指针,在这里定义了指针变量然后它被赋值,等同如下代码:
int a; int *b=&a;
总结一下,int *a=new int;这行代码直接初始了指针,这个指针一出生就有了自己的地址示例代码如下:
#include<iostream>
int main(){
using namespace std;
int a=1;
int *b=new int;
cout<<"a"<<a<<endl;
cout<<"b"<<b<<endl;
cout<<"*b"<<*b<<endl;
*b=*b+1;
cout<<"*b"<<*b<<endl;
cout<<"a"<<a<<endl;
}
3.使用delete删除内存
C++要求使用完内存后需要主动释放内存,不然内存一直被占用可能会导致内存耗尽。释放内存使用delete,可以理解为删除,把这块空间里面的东西全部删除,自然就空出来,内存就不是满的了。 使用如下:
```
int *b=new int;
...
delete b;
```
指针变量b并没有被删除,他只是删除了指针变量b所指向的那块地址的内容。使用new后一定要记得配套的使用delete。不然会发生内存泄漏,被分配的内存将无法再使用。