指针的概念
指针就是地址,指针变量保存地址,通过解引用指针我们可以找到地址所在的空间,并对其进行操作。
这里我们通过对指针pa的解引用找到a,并对其进行修改。
指针具有固定大小。在32位环境下,指针为4个字节大小,在64位环境下,指针为8个字节大小。
32位环境下演示:
指针类型与解引用
指针指向的类型表示其解引用时所引用的空间大小,即读取几个字节。
一级指针:
char* a //指针指向类型为char,所以解引用1个字节
int* a //指向类型为int,解引用4个字节
float* a //指向类型为float,解引用4个字节
double *a //指向类型为double,解引用8个字节
二级指针:
char **//指向类型为char*,解引用4个字节
int ** float** double** 与char**相比,指向类型不同,但指向类型都是指针,大小相同,解引用字节数相同。
注:p[i]=*(p+i)
指针与数组
数组名表示首元素地址,所以其实数组名也是一个指针。
注:sizeof(a)中a表示整个数组,&a中a也表示整个数组。
其余情况数组名单独出现均表示首元素地址。
指针数组
int *a[10] //a先与[]结合,表示数组,所以a[10]是指针数组,数组元素为int *。
数组指针
int (*a)[10] -> int [10](*a) 表示数组指针,a指向int[10]类型的数组
指针运算
对指针进行加减运算,表示从指针指向的地址开始越过其指向类型大小*数字个字节。
p指向int类型,所以+1表示越过4个字节,+2表示越过8个字节。
指针-指针运算:表示两个指针之间的元素个数。
强制类型转换
指针可以被强制转换成其他类型
题目练习
所以结果为10 ,5。