C语言学习20250611
指针
指针类型
- int p;==》普通的整形变量
- int *p;==》p先与*结合,表示p为指针,该指针指向的内容的数据类型为整型
- int p[3];==》p为一个由整型数据组成的数组
- int *p[3];==》因为[]比*优先级高,p先与方括号结合,所以p为一个数组,再与*结合说明数组内的元素是指针类型,指针指向的内容类型为整型,所以p是一个由返回整型数据的指针所组成的数组
- int (*p)[3];==》p先与*结合,说明p为指针,再与方括号结合,说明指针指向的内容是一个数组,然后再与int结合,说明数组内的元素为整型,所以p为一个指向由整型数据组成的数组的指针
- int **p;==》p先与*结合,说明p为指针,然后再与*结合,说明指针指向的元素为指针,然后再与int结合,说明该指针所指向的元素是整型数据
- int p(int);==》p先与括号结合,说明p为函数,且该函数有一个整型变量的参数,函数的返回值是整型数据
- int (*p)(int);==》p先与*结合,说明p为指针,然后与括号结合,说明指针指向一个函数,函数有一个整型变量的参数,返回值为整型数据,所以p是一个指向有一个整型参数且返回值为整型的函数的指针
- int *(p(int))[3];==》p先与括号结合,说明p为函数,函数有一个整型变量的参数,再与*结合,说明函数返回的是指针,再与方括号结合,说明返回的指针指向一个数组,再与结合,说明数组里的元素为指针,再与int结合,说明指针指向的内容是整型数据,所以p是一个参数为一个整型数据且返回一个指向由整型指针变量组成的数组的指针变量的函数
指针
指针为特殊变量,存储的数值为内存中的地址。
指针重点:
- 指针的类型
指针本身所具有的类型,把指针声明语句中的指针名字去掉,剩下的部分就是指针的类型
int *p;==》指针的类型为int * - 指针所指向的类型
当通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。
将指针声明语句中的指针名字和*去掉,剩下的就是指针所指向的类型 - 指针的值(指针所指向的内存区)
指针本身存储的数值,这个值会被编译器当做地址
指针所指向的内存区就是从指针的值所代表的那个内存地址,长度为sizeof(指针所指向的类型)的一片内存区。 - 指针本身所占据的内存区
32位平台中指针本身占据4字节
指针的运算
一个指针pold加/减一个整数n后,结果是一个新指针pnew,两指针类型相同,所指向的类型也相同,两值相差n*sizeof(pold指针所指向的类型)个字节
两指针不能加法运算,为非法操作;可以进行减法运算,但必须类型相同
运算符&和*
&:取地址运算符
* :间接运算符