一.指针本质
和普通的Int float一样也是数据类型,等同于unsiged int为四个字节
二.结构体指针
结构体指针的正确两种正确使用:
1.为结构体指针申请变量使其可以用指针操作这个变量里面的值
2.已经有个结构体变量,则可以只申请相同结构体类型的指针(不用为其申请空间),然后用这个指针操作那个变量
总结一下:指针要操作,必须要有操作的东西(不要只是一个指针就对这个指针里面的东西操作,可能里面根本就没有)
典型错误使用:
本以为会打印出00000000,但是这里的list->headNode根本还没指向申请了空间的headNode,所以更改为:
结构体不同的赋值和访问方式:
三.函数指针
函数名就是首地址
因为函数名可以是地址,因此可以用指针来保存
再加上调用
四.野指针
两类:指向被销毁;指向没权限(系统或其他程序正在使用)
理解free(p):p为指针,*p为取所指向地方的值,free(p)是销毁p所指向的地方
p中的地址保持不变,只是指向了一片废墟。所以,free(p)后应该
将p置空p=NULL避免野指针
五:数组中的指针
数组名和数组的第一个元素地址就为数组的地址
因为存在地址,就可以用指针访问元素
理解一下这里的p[2],因为a等同于地址并将它赋给了指针p,所以这里的p[2]可以
看做a[2]。
六.字符串中的指针
字符串是一个常量,类似于一位数组(一位数组的名字也是一个常量,无法改变其位置,没法进行加减)
字符串中元素访问
注意:字符串的特殊之处,是一个常量(一位数组可以,因为只是名字是常量)