C/C++ 指针杂谈(一)

谈谈自己对于指针的理解

一、指针变量,首先它是一个变量,所以他满足变量的条件,它有变量名,有数据类型,它有自己的存储空间,可以保存自己需要的数据,而它保存的数据就是地址。

在这样一个定义中int* p;这样就定义了一个指针变量,p是它的名字,int是它的类型,他现在保存的地址是一块不清不楚的地址(这就是一个野指针),现在使用它时,会造成一个运行时错误,这种情况是一定要避免了,当不知道一个指针该指向什么地方时,应该把它指向空的,如int* p = NULL;这样定义,这个指针才是有意义的,它现在保存的内存地址是0x00000000。
指针也是有着自己的地址,每当你int*时,内存会开辟出一块内存空间给你,这块空间就存储了别人的地址空间。如:int a = 10;int* p = &a a的地址是:0x0000FB20;里面保存了 10 这个数。p的地址是:0x0000FB30;那么它的里面就保存了 0x0000FB20 这个地址。
正确的使用指针,应当给它一块正确的内存地址(可被读写),如int a = 10; int* p = &a,代表了指针的数据保存的a的地址,还有一点,int
要跟 int 类型对应,double* 也要跟 double 类型对应。

二、指针作用,当指针指向了一块正确的内存地址后,就可以对指针进行一些基本的操作了。

介绍一下指针运算符( * ),在这里,不代表乘除法中的乘,而是表示对指针的操作。
( * )运算符在左边时(*p = xxx;),代表着想要改变(写)指针指向的地址。
( * ) 运算符在右边时(a = *p;),代表着读取(读)指针指向的地址。
上面介绍到 int* 会保存一个地址,所以当你操作指针时,实际上你就改变了那块地址的值。
如:int a = 10;int* p = &a 当你 *p = 20;时,其实是把 0x0000FB20 里面保存的数改变成了20,理所当然的,a也改变了,因为 a 的内存是 0x0000FB20 ,他并没有重新被分配内存。
同理,当你printf("*p = %d",*p);时,就是读取出0x0000FB20的值(这里*相当于在右边);

三、安全指针,指针很强大,但是稍有不慎也可能导致你整个工程项目崩溃,所以,但你使用指针时,一定要确保它的安全。

当声明一个指针时,一定要记得初始化,因为错误的使用的一个指针,会轻易的导致你的程序崩溃,野指针在程序设计中是不被允许的,而空指针是被允许的。
一个野指针,对于编程人员来说,是无法被防范的,当一个野指针出现,而你又恰好使用到了它,那么你的程序应该已经在崩溃的边缘了,因为野指针是无法判断的,不确定的。
一个空指针,在程序设计中是运行的,因为它是可以被防范的,能被判断的,你可以通过一个 if 语句(if(p == NULL))来判断指针是否为空,在某些特殊时候,空指针的设计是不可或缺的。
当你使用指针时,一定要确保它得到了初始化,哪怕是指向 NULL 都是可以的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值