Bootstrap

c语言指针进阶1

目录

1.const修饰指针

2.野指针回顾

3.assert断言

 4.深入理解数组与指针

1)数组名

​编辑

2)指针访问数组

3)一维数组传参的本质

5.二级指针

6.指针数组


1.const修饰指针

const就像是给其修饰的指针加上限制。主要有两种情况如下图

此时*p所指空间的内容不可修改。 

此时指针变量p所指向的地址不可改变。

2.野指针回顾

 野指针出现主要有以下几种情况

1)数组越界访问

2)指针指向的空间被释放

3)指针未初始化直接访问其空间内容

避免野指针方法

1)指针初始化

2) 避免返回函数内部局部变量的地址

3)指针使用后及时置为NULL

3.assert断言

assert使用需要包含头文件include<assert.h>,用来判断指针是否为NULL。如果为空直接报错,同时返回错误产生行号。

如果在使用指针时,具有避免野指针的习惯,可以帮助程序员快速定位错误。或用来判断冒一些函数返回值是否为空 。同时assert可用来通过#defineNDEBUG禁用。

上述const 与assert都可用来增强程序的健壮性,程序更安全。

 4.深入理解数组与指针

1)数组名

数组名在大多数情况下为数组首元素地址,当其在sizeof及&数组名时为整个元素地址。

 

2)指针访问数组

可通过指针变量名【下标】访问数组内容等同于*(数组名+ 下标)和数组名【下标】

3)一维数组传参的本质

一维数组函数传参本质上传递的为数组首元素的地址,对其解引用即可访问数内容。

但数组内部无法用sizeof求整个数组的大小。

5.二级指针

二级指针为存储一级指针变量地址的指针变量。

6.指针数组

存储地址的数组

指针数组应用

指针模拟二维数组 

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;