一:字符指针:
例如:普通的字符指针
这里的指针p指向的内容是可以修改的。
例如:直接将字符串存放在指针里面
这种做法实际上是将字符串的首元素地址放进a和b中,因为字符串是相同的,所以内存中开辟的是同一个空间,因此注意一下,a和b的首元素的地址是一样的。
如果要打印两个元素:
二、指针数组:
顾名思义就是定义一个数组里面存放的是指针变量而已。可以理解为指针的数组
圈划出来的是变量的类型,如第一个类型就是int*,第二个就是char*,第三个就是float*
同理可得到:
三、数组指针:理解为数组的指针
理解方式:首先,*与p先结合,说明p是一个指针变量,之后说明了p指向了一个总共含有5个元素的数组,最后说明了元素的类型是int类型。
说明:这里要注意我们一定要使p与*先结合,因为[]的优先级是高于*号的,如果不加括号,就是代表一个指针数组。
四、&数组名VS数组名:
看一段代码:
结果是相同的。
再看一段代码:
可以发现,两个结果的差值为40。
那么为什么会出现这种差别呢???
解释:单独使用arr代表取出数组的首元素的地址,这个指针相当于是int*指针,而&arr代表的是取出整个数组的地址,但是还是将首元素的地址存放在其中,但是它的类型却是int(*p)[10],这是一个数组指针。所以,打印它们的地址,都是一样的,都是首元素的地址。但是+1的话,arr+1代表跳过一个元素,&arr+1代表跳过一个数组,int类型一个数据大小为4,所以地址最后也就相差了40。
运用实例:说出这个代码代表的含义:
解释:首先,这个parr3是一个指针,但是parr3要先和[10]结合,这就说明它指向一个含有10个元素的数组,然后看外层的信息,这个数组中存放的是数组指针,具体地说,这个数组指针指向的是含有5个int类型元素的数组
五、一维数组传参
例子:
传参时注意传过去的参数要要用一样类型的数据接收就行,比如一维数组数组名传过去的就是首元素的地址,只要用相应的数据接收就行。
六、二维数组传参:
注意点:还是注意形参与实参的数据类型是否一致。
七、一级指针传参:
例子:
八、二级指针传参:
例子:
这里的两种写法都是可以的。&p取出的是int*p的地址,pp本身就是二级指针