本文参考资料来源于 <Professional C++, 4th Edtition>
如果不是你想看的内容, 推荐查看 C++指针目录
C++ 中, 指针是一个很常用的工具, 就来介绍一下
平常, 我们声明一个局部变量是这样子:
void f()
{
int x=0;
}
它在内存中的状态如图:
如果我们要将 x 在堆栈中, 指向堆中的内存, 就是指针
void f() { int *x= new int; }
这时候 x 虽然在堆栈中, 却指向堆的内存
指向的内存如果这个函数结束了怎么办? 这块内存难道就扔在那里了?
当然不! 我们需要的是释放内存
1 void f() 2 { 3 int *x=new int; 4 delete x; 5 x=nullptr;//置空 6 }
在第四行, 我们释放了 x 的内存, 而 x 就没用了, 就应该把它置空
当一个指针指向一个变量的内存地址时, 这个指针的值为当前指向的变量的地址
而如果想得到指针指向的变量的值时, 需要加上 ' * ':
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int x=10; 6 int *pointer=&x;//指向x的地址 7 cout<<pointer<<endl;//这里输出的是pointer指向x的地址 8 cout<<*pointer<<endl;//这里才是pointer指向x, x的值 9 *pointer=20;//这里是将x与*pointer赋值为20 10 cout<<x<<' '<<*pointer<<endl; 11 return 0; 12 }
输出:
1 0x104dfeec 2 10 3 20 20
这种关系类似引用
指针的处理复杂, 需要一段时间消化
如果可以消化, 请看: 指针与一维数组 或者 智能指针unique_ptr
推荐查看 C++指针目录