C语言—指针初阶

目录

一、指针是什么?

二、指针和指针类型

2.1、指针类型的意义

2.1.1、指针类型决定了:指针解引用的权限有多大

2.1.2、指针类型决定了:指针走一步,能走多远(步长)

三、野指针

3.1、概念:

3.2、野指针的成因

3.2.1、指针未初始化

3.2.2、指针越界访问

3.2.3、指针指向的空间已释放(无家可归)

3.3、如何规避野指针

3.3.1、指针初始化

3.3.2、小心指针越界

3.3.3、指针指向空间释放,立即置为NULL

3.3.4、指针使用之前检查有效性

四、指针运算

4.1、指针+-整数

4.2、指针-指针

4.3、指针的关系运算

五、指针与数组

5.1、数组名是什么?

5.2、指针与数组关系

六、二级指针

七、指针数组


一、指针是什么?

       在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的成为“指针”。意思是通过它可以找到以它为地址的内存单元。

注意:内存中的存储单位:字节

总结:

1、指针就是变量,用来存放地址的变量。(存放在指针中的值被当做地址处理),而地址用来唯一标识一块地址空间。

2、指针的大小在32位平台是四个字节,64位平台是8个字节。

二、指针和指针类型

变量又不同类型,整型,浮点型等,同理,指针也有类型。

变量有多少类型,指针就有多少类型!

举例:

2.1、指针类型的意义

2.1.1、指针类型决定了:指针解引用的权限有多大

2.1.2、指针类型决定了:指针走一步,能走多远(步长)

三、野指针

3.1、概念:

野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明显限制的)。

理解:大街上无人牵着,没人管的狗,我们戏称为:野狗,野指针同理。

3.2、野指针的成因

3.2.1、指针未初始化

p假如是一个局部指针变量,如果不初始化,默认为随机值。

3.2.2、指针越界访问

3.2.3、指针指向的空间已释放(无家可归)

3.3、如何规避野指针

3.3.1、指针初始化

3.3.2、小心指针越界

C语言本身不会检查数据的越界行为,需要编程者保持头脑清醒,保证没有越界。

3.3.3、指针指向空间释放,立即置为NULL

3.3.4、指针使用之前检查有效性

如何检查?(判断指针:为空—不用,不会空—才用)

四、指针运算

指针运算主要分为三类:

1、“指针+-整数”,

2、“指针-指针”,

3、“指针的关系运算”。

4.1、指针+-整数

指针+-整数的步长,为指针变量类型的字节长度

4.2、指针-指针

指针-指针的前提:两个指针指向同一块空间

指针-指针得到的是两个指针之间的元素个数

应用:编写求字符串长度的函数

4.3、指针的关系运算

1、

2、

虽然绝大多数编译器可以让上诉第二个代码可以顺利完成任务,然而我们还是应该避免这样写,因为标准并不保证他可行。

C语言对指针的标准规定:

       允许指向数组元素的指针与指向数组的最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一元素之前的那个内存位置的指针进行比较。

五、指针与数组

5.1、数组名是什么?

数组名是数组首元素的地址

5.2、指针与数组关系

可以将数组名赋值给一个指针,二者等价

int * p  = arr;   //p存放数组arr的首地址

既然可以把数组名当做地址存放在一个指针中,我们使用指针来访问一个数组就成为可能。即,指针可以指向一个数组。

六、二级指针

指针变量也是变量,是变量就有地址,那么指针变量的地址存放在哪里?——二级指针。

同理,我们可不可以写三级指针呢?答案是可行的,理论上我们可写无限指针(禁止套娃!)。但是不常用,三级指针及之后均不常用。

七、指针数组

指针数组是指针还是数组?

答案:是数组,是存放指针类型的数组

等同于:整型数组,字符数组

制作不易,喜欢就点赞收藏吧!!!持续更新中~~~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值