指针定义
指针是内存中一个最小单元的编号,即地址
指针的大小在32位平台是4个字节,在64位平台是8个字节
口语中指针通常指指针变量,用来存放 内存地址变量
int * pa = &a *说明pa是指针变量 int说明pa指向那个对象 通过*pa就能找到a平台
指针类型
两个十六进制就是一个字节,一个十六进制数就是四位二进制数
0 1 2 3 4 5 6 7 8 9 a b c d e f
11111111
8421
指针类型决定:指针解引用的权限有多大(能操作几个字节),指针走一步能走多远
指针类型的意义主要是在指针的地址+1的时候决定是+1还是+4还是+8
int型指针(字符指针)绑定4个字节,该指针地址+1就相当于+4个字节,
char型指针绑定1个字节,地址+1相当于+1个字节
希望访问数组的时候以整型元素的方式来访问数组,就用整型指针,p+i其实是下标为i的地址 类比其他类型
野指针:指针指向的位置是不可知的,随机、不正确、没有明确限制
成因:1.指针未初始化
局部变量不初始化的话,默认是随机值
2.指针越界访问
c语言本身不会检查数据的越界行为的,指针变量不知道指向哪里的时候及时初始化空,指针指向空间不用的时候,初始化空指针
判断方法:if(p != NULL)
指针运算
指针+-整数
*vp是解引用 vp是指针变量
指针-指针
指针和指针相减的前提:两个指针指向同一块空间
应用:
指针的关系运算
避免第二种写法
标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但不允许与指向第一个元素之前的那个内存位置的指针进行比较
指针和数组:
不管是数组名还是把数组名放到一个指针变量中,都是地址
二级指针
指针数组
本质是数组
要熟练掌握利用指针,互换变量的值
此处for(p=a;p<=a+9;p++),指针P指向数组a[]的地址,利用指针变量输入数组元素,先把数组第一个元素a[0]设为最大值,后遍历挨着比较数组内元素,如果大于则将max换成所比较的元素。
字符指针
char*
指针数组
int* arr1[10];整形指针的数组
char *arr2
函数数组
数组名的意义总结:
size of(数组名)-数组名表示整个数组的-计算的是整个数组的大小
&数组名-数组名表示整个数组,取出的是整个数组的地址
除此之外,所有的数组名都是数组首元素的地址
strlen认为()是地址
二维数组