二级指针-空指针-野指针

文章详细介绍了C++中的二级指针概念,如何声明和使用,以及其在函数参数传递中的作用。同时,讨论了空指针的表示方法,包括C++11引入的`nullptr`,并提醒程序员避免对空指针解引用或释放已释放的内存。此外,文章还阐述了野指针的问题,列举了可能出现野指针的三种情况,并给出了预防措施。
摘要由CSDN通过智能技术生成

二级指针:

指针是指针变量的简称,也是变量,是变量就有地址。

指针用于存放普通变量的地址。

二级指针用来存放指针变量地址

声明二级指针的语法: 数据类型** 指针名

使用指针有两个目的:1)传递地址;2)存放动态分配的内存的地址

在函数中,如果传递普通变量的地址,形参用指针;传递指针的地址的地址,形参用二级指针。 

#include <iostream>
using namespace std;
int main()
{
	int ii = 8; cout << "ii=" << ii << "  ii的地址是:" << &ii << endl;
	int* pii = &ii; cout << "pii=" << pii << "  pii的地址是:" << &pii <<"  *pii="<<*pii<< endl;
	int** ppii = &pii; cout << "ppii=" << ppii << "  ppii的地址是:" << &ppii << "  *ppii=" << *ppii << endl;
	cout << "**ppii=  " << **ppii << endl;
}

 运行结果:

 空指针:

 在C/C++中,用0或null都可以表示空指针。

声明指针后,在赋值之前,让它指向空,表示没有指向任何空地址。

1)使用空指针的后果

        如果对空指针解引用,程序会崩溃。

        如果对空指针使用delete运算符,系统将忽略该操作,不会出现异常,所以内存被释放后,也应该把指针指向空。

#include <iostream>
using namespace std;
int main()
{
	int* p = 0;
	//如果对空指针解引用,系统会崩溃。
	//cout << "p= " << p << " *p= " << *p << endl;
	//如果对空指针使用delete运算符,系统将忽略该操作,不会出现异常。
	delete p; cout << "delete ok.\n";
}

在函数中应该有判断函数是否有空指针的代码,保证程序的健壮性。

2)C++11中的nullptr

        用0和null表示空指针会产生歧义,C++11建议用nullptr表示空指针,也就是(void*)0。

野指针

野指针 就是指针指向的不是一个有效合法的地址。

在程序中如果访问野指针,可能会导致程序崩溃。

出现野指针的情况有三种:

        1)指针在定义的时候,如果没有进行初始化,它的值是不确定的。

        2)如果用指针指向了动态分配的内存,内存被释放后,指针不会置空,但是指的地址已失效

        3)指针指向的变量已超越变量的作用域(变量的内存空间已被系统回收)

规避方法:

        1)在指针定义的时候,如果没地方指,就初始化为nullptr。

        2)动态分配的内存被释放后,将其置为nullptr。

        3)函数不要返回局部变量的地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值