指针 重点干货

目录

一.基础详解

二.指针的类型

三.指针初始化

四.指针的加减运算

五.重难点分析


我们创建变量,其实就是向内存申请空间

一.基础详解

int *p=&a  ,其中a的地址存放在p中,存放地址的变量叫做指针变量,所以p是指针变量
p的类型是int*,  *说明p是指针变量,int说明p指向的对象a是整型的,所以p是一个返回整型数据的指针
因为p里存放a的地址,所以可得出p=&a  或*p=a  

指针变量就是用来存放别人地址的

二.指针的类型

类型
int*ptrint*
char*ptrchar*
int**ptrint**
int(*ptr)[3]int(*)[3]
int*(*ptr)[4]int*(*)[4]

三.指针初始化

Int*p=&a;

如果对指针一开始没有初始化,会导致程序无法进行,因为指针并没有指向一个合法的地址,
这时候其内部存的都是一些乱码,所以在调用函数时,会使用乱码所指的内容
总的来说就是如果指针没有初始化,那就说明它所指向的内存区是不存在的,无意义的

四.指针的加减运算

两指针相减,表示两个指针之间的距离,单位是字节

对于指向相同数组或相同数据结构的指针来说,两个指针相减,得到的结果是这两个指针之间相差的元素个数

eg.

表示p2和p1之间相差5个元素

注意  :  两个指针之间不能进行加法运算,因为加了之后得到的结果是一个指向一个不知所向的地方

五.重难点分析

  • int p:这是一个普通的整型变量
  • int *p:这里的*与p结合说明p是一个指针,一个int说明指针所指向的内容是int类型的
  • int p[3]:首先p与[]结合,说明p是一个数组,然后与int结合,说明数组里存放的元素是int类型的,所以p是一个由整型数据组成的数组
  • int *p[3]:首先p先与[]结合,说明它是一个数组,然后再与*结合说明数组里面的元素是指针类型的,再与int结合,说明指针所指向的元素类型是整型,所以p是一个返回整型数据的指针所组成的数组
  • int(*p)[3]:首先p与*结合,说明p是一个指针,再与[]结合说明指针所指向的内容为数组,再与int结合,数组内元素为整型,所以p是一个指向整型数据组成数组的指针
  • int**p:首先是p与*结合,说明p是个指针,然后再与*结合说明指针所指向的元素是指针
  • int p(int):先从p开始,与()结合,说明p是一个函数,然后进入(),说明该函数有一个整型变量的参数,然后再与外面的int结合,说明函数的返回值是一个整型数据
  • int(*p)(int):从p处开始,先与*结合,说明p是一个指针,然后再与()结合,说明p所指向的是一个函数,再看括号里是int,说明函数内有整型类型的参数,然后再与外面一层的int结合,说明函数的返回值类型是整型,所以p是一个指向有一个整型参数且返回值类型是整型的函数的指针
  • int*(*p(int))[3]:首先p先与()结合,说明p是一个函数,然后进入到()里面,与int结合,说明函数有一个整型变量参数,再与*结合说明函数返回的是一个指针,再与[]结合说明返回的指针指向的是一个数组,再与*结合,说明数组中的元素是指针,再与int结合,说明指针指向的内容是整型数据,所以p是一个具有整型参数的且返回一个由整型指针变量组成的数组的函数

以上先与谁结合等操作,主要是通过操作符优先级来分析。

写作不易,若有疑问,请各位大佬指教,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值