c++学习:指针

1:什么是指针和指针的分类

1:什么是指针

答:指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址,要搞清一个指针要搞清指针的三个内容:1.指针的类型,2.指针指向的类型,3.指针指向哪里

2:指针的三个内容

@1:指针的类型(就是直接将ptr去掉)
int *ptr; //指针的类型是int *  
char *ptr; //指针的类型是char *  
int **ptr; //指针的类型是 int **  
int (*ptr)[3]; //指针的类型是 int(*)[3]  
int *(*ptr)[4]; //指针的类型是 int *(*)[4]


@2:指针指向的类型(就是指直接去掉*ptr)
int *ptr;	//指针所指向的类型是int  
char *ptr;	//指针所指向的的类型是char  
int **ptr;	//指针所指向的的类型是 int *  
int (*ptr)[3];	//指针所指向的的类型是 int()[3]  
int *(*ptr)[4]; //指针所指向的的类型是 int *()[4]  



@3:指针的值
在32位的程序里所有类型的指针的值都是一个32位的整数。因此指针本身占据的内存大小是4个字节的长度,用sizeof(指针的类型)就能知道。

@4:指针指向的值

2:指针野指针的判断

@1:案例
#include <iostream>
using namespace  std;

#define SAFE_DELETE(x) if( (x) != NULL ) { delete (x); (x) = NULL; }	//@1不直接delete,通过 SAFE_DELETE释放,保证了  x=NULL

#define	KEY_VALUES  1234321	//用来避免野指针			//@2给类对象赋予一个用于判断是否正常的变量
#define	IF_NOT(x,x1) if ((!x) ? 1 :((x1 != KEY_VALUES) ? 1:(assert(false),0)))
class A
{
public:
	A(){ this->nKey = KEY_VALUES; }
	void fun(){ cout << "ssssssssssssssss" << endl; }
	int nKey;
};

void main()
{
	A *p = new A;
	A *p1 = p;
	
	SAFE_DELETE(p);			//处理方法@1
IF_NOT(p1,p1->nKey) //一旦p1是野指针的话,nKey就会变成乱值与 KEY_VALUES一样的概率很低
	{//处理方法@
		2p->fun();
	}
}

















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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值