指针方面相关内容,及其易错点


前言

我自己前段时间一直在学习指针方面相关内容,个人觉得对于像我这样的初学者来说,学到指针这里就感觉到相对比较困难了,所以呢,在学完指针之后,特此做一个指针方面的知识汇总,以及一些易错点,如果有不完善的地方,还望大家多多指正。
在这里插入图片描述

一丶野指针

我们先来说一个指针中容易犯的错误,什么叫野指针呢?
野指针就是说指针指向的位置不可知,常见的造成野指针的原因有以下三点
1.int* p; 未对指针初始化,如果我们不知道地址,那我们写成int*p=NULL;即可
2.指针越界访问
3.指针指向的空间释放

指针的运算

1.指针±整数

指针±整数,就是访问地址是时跳过几个元素,大家可以看看这个代码感受一下。在这里插入图片描述

2.指针-指针

指针-指针:指的是同一块空间里指针与指针之间元素的个数
在这里插入图片描述

3.指针的关系运算

指针的关系运算,简单的就可以理解为指针所指向那个空间所对应指的大小运算

​​​​​​​​​​​​​​​

二、字符指针


字符指针这里比较简单,就比如char* 就是一个字符指针,在这里我就给大家分享一道例题
在这里插入图片描述

在这里,第一个if语句,执行的是else,if里的str1 与str2分别指的是数组首元素地址,虽然数值相同,但地址是不同,大家可以注意一下;第二个if,*str1,*str2,解引用操作就指的是数组第一个元素,都是h,所以这时候就是相等的。希望这题能对大家有帮助。

三、指针数组与数组指针

1.指针数组

指针数组的本质上是一个存放指针的数组
在这里插入图片描述

2.数组指针

在这里插入图片描述
数组指针的本质上指向数组的指针。

int* p=NULL//p是整形指针——指向整形的指针——存放整形的地址
char* pc=NULL//pc是字符指针——指向字符的指针——存放字符的地址
//那么数组指针就是——指向数组的指针——存放数组的地址

那么问题来了,这样一个数组指针该怎么表示呢?

int arr【10={0}int* p【10=&arr;//是这样吗?应该不是,【】的优先级高于*,所以这样就是一个存放指针的数组了,即指针数组
int*p)【10=&arr;//这样就合理了,首先可以知道他是一个指针,然后指向的是一个数组,所以是存放数组的地址,即数组指针

那我们再看一个例子,char* arr【5】;
这个数组指针又该怎么表示呢?________=&arr;







正确答案是: char*((*pa)【5】)=&arr;
那为什么呢?下面用一副图给大家解释一下
在这里插入图片描述
最后我们再来整理一下数组指针和指针数组
在这里插入图片描述

四、数组名 与&数组名

单独的数组名,就是首元素的地址
arr 与 &arr【0】表示的意义是一样的,都是首元素地址
有两种例外,数组名不单独表示数组首元素地址
1.我们计算字符串长度的时候

int sz=sizeof(arr)/sizeof(arr【0】);
//这里 arr就表示的是整个数组

2.&arr,&arr表示的是取整个数组的地址,而不单单是一个元素的地址
3.&arr+1 跳过的是整个数组;arr+1 跳过的一个元素

五、数组参数、指针参数

1.一维数组传参


像上面的传参形式都是正确的,一维数组传参,可以直接用数组来接收,也可用指针来接收,因为传参传的就是首元素地址;像test2 指针数组传参,原理是一样的 可以直接用指针数组接收,要注意的是用指针进行接收时要用二级指针,因为指针数组里的元素本来就是地址,现在传首元素的地址,可以理解为传地址的地址,所以应该用二级指针接收。

2.二维数组传参

在这里插入图片描述

在这里插入图片描述

3.一级指针传参

在这里插入图片描述

4.二级指针传参

在这里插入图片描述

六丶函数指针

1.函数指针:即指向函数的指针——存放函数地址的指针

在函数里: &函数名 与 函数名 都指的是函数的地址
比如一个加法 函数

int Add (int x,int y)
int*p)(intint=Add;//它写为指针的形式就是这样,交代清楚返回类型,(*p)保证它为指针

但是在调运函数指针时,* 或者不解引用都可以,比如说:

print(“%d”,p(23);//p里存的就是Add的地址 相当于Add(2,3)
print(“%d”,(*p)(23//这俩个结果都是相同的

2.函数指针数组

通过上面的介绍,我们就知道,这个函数指针数组呢,它是一个存放函数指针的数组,数组里存放的是每一个函数的地址,根据这个概念呢,我突发奇想,做了个加减乘除的计算器,数组里放了每个函数,有些不足也希望大家可以指正,代码如下:

在这里插入图片描述在这里插入图片描述在这里插入图片描述

3.指向函数指针数组的指针

当时看到这个的时候已经崩溃了,指针就是无限套娃又套娃吗???!!!
在这里插入图片描述
我们可以根据这个代码理解一下指向函数指针数组的指针,就是套娃再套娃!
在这里插入图片描述

七丶总结

自己目前学习关于指针的内容总结出来就是这些啦,有不足和纰漏的地方欢迎大家多多指正,都看到这里了,点个赞再走吧,谢谢大家.

请添加图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>