简介指针(1.基础)

     说到指针大家可能会认为很难,事实只要我们认真学那就一定会学会!

     这篇我主要介绍:

      1.指针和指针变量及大小

      2.指针的运算

      3.void*指针

      4.野指针

  • 指针和指针变量及大小

      那指针到底是什么呢?其实指针==地址==内存单元编号。那怎么得到地址呢?这时候就要用到取地址操作符(&)。我们还需要一个变量来存放地址,这个变量叫指针变量。

c1d76e8c026c43348d7d7bda73ad0f68.png     

       那要怎么理解呢?

27eca47f430a4c35adccd447b3ed89f7.png

      我们将地址保存起来,以后是要使用的,那怎么使用呢?这时候要用解引用操作符(*)。

9b373a99fdac4063b0dcbbca0f2109a9.png

      大家肯定会好奇指针类型变量的大小是多少呢?

      先说结论:32位平台下是4个字节,64位平台下是8个字节。

      指针变量大小是和机器有多少位有关的。如果机器是32位,也就是相当有32根地址总线,每根地址线出来的电信号转换成数字信号后是1或者0,那我们把32根地址线产生的2进制序列当做一个地址,那么一个地址就是32个bit位,需要4个字节才能存储。64位同理。

      

  • 指针的运算

1.指针+- 整数 

     c7463882ce7645c3b94e4a3c0f8b68c0.png

       p1和p2都指向a的地址所以是一样的,p1指向的是int类型,int类型有4个字节所以加1跳过4个字节。但p2被强制转换char类型,char类型有1个字节所以加1跳1个字节。

      结论:指针的类型决定了指针向前或者向后移动多大,这也体现出了为什么大小一样但还有不同类型。

2.指针 - 指针

     指针-指针的绝对值指的是两个指针之间元素的个数。两个指针必须指向同一空间。

200efcff54f44fda849fc007add230e1.png

3.指针的关系运算

       指针也可以判断是否相等,也可以进行比较大小等等。

  • void*指针

        void*是一种特殊类型的指针。可以理解为无具体类型的指针(或者叫泛型指针),这种类型的指针可以用来接受任意类型地址。但是也有局限性,void*类型的指针不能直接进行指针的+-整数和解引用的运算。

       一般 void* 类型的指针是使用在函数参数的部分,用来接收不同类型数据的地址,这样的设计可以实现泛型编程的效果。

  •  野指针

     野指针,是指向不可用内存区域的指针。造成野指针大概有这三种:

      1.指针未初始化。

      2.指针越界访问。

      3.指针指向空间释放。

     野指针是很危险的,所以我们要尽量避免出现野指针。那要怎么避免呢?

     1.当要用指针时需要进行初始化,如果暂时用不到可以赋值空指针(NULL)。

     2.小心指针越界访问。

     3.当指针使用完后要及时置NULL,在指针使用前要检查是否有效。

     4.避免返回局部变量的地址。

    如果存在错误地方请及时指出,如果还有什么不懂的地方可以私信我,如果觉得不错那就点点赞吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值