目录
前言
❤️指针
理解指针的两个要点
为什么用指针这个名词来称呼?
❤️一级指针
整型指针
浮点型指针
字符指针
总结
❤️指针数组
数组的类型是什么?
指针数组到底是指针还是数组?
那么指针数组的类型是什么?
总结
❤️数组指针
什么是数组指针?
数组指针的类型是什么?
总结
❤️二级指针
什么是二级指针?
❤️函数指针
什么是函数指针?
函数指针怎么表示
函数指针的类型是什么?
总结
前言
❤️ :热爱编程学习,期待一起交流。
🙏:博主是河牧院大一在读学生,水平有限,如发现错误,期待指点!
在《C语言深度剖析》这本书上,我看到了这句话:普通人用 C 语言在 3 年之下,一般来说,还没掌握 C 语言;5 年之下,一般来说还没熟悉 C 语言;10 年之下,谈不上精通
所以我只能说带大家入门指针,仅仅是了解指针而已。怎么用的话,我再学几年也不一定能用明白。
因为涉及到用法后就会显得更加枯燥和冗余
后续再入门指针的用法和怎么用,本篇讲讲我对指针的理解。
这两天和女朋友闹矛盾了,心情甚是难受,因此去看了一些关于指针的视频,一不小心就《入门》了指针。虽然在学校时老师已经讲过了指针,老师一节课2小时把C语言指针讲完了,虽然我没听懂,但我大受震撼。但我觉得那并不是入门,那只是让我知道了C语言有指针这个概念罢了。只是占了冰山一角的一丢丢丢…(冰山一角占整个冰山的1/10,两个小时怎么能入门呢?)。因此在12.25日至12.26日下午看了两天的指针视频以及书籍,收获颇大,我想以笔记的形式并简介的记录下来,仅供大家参考,同时以便我以后的温故而知新。
如有纰漏,欢迎指出。
下图纯属娱乐(女朋友还是挺重要的,嘿嘿)
❤️指针
理解指针的两个要点
- 指针就是地址。
- 平时老师口头说的指针就是指针变量,指针变量是用来存放地址的。
int a = 10;//创建变量a,a里存储10。 int* p = &a;//创建变量p,p里存储a的地址。
p是指针,存放的是a的地址。我们通常称int* p = a为p指向了a。
为什么用指针这个名词来称呼?
- p是变量,p里面存储了a的地址,我们可以通过*p找到p所存储地址上的值。所以称p指向了a。 所以我们把变量p叫做指针。
- 假设张三欠李四了十块钱。
int 张三 = 10;//现在张三的口袋里揣了10块钱 int* 李四 = &张三;//李四手里拿着张三的地址
- 现在李四要发射一个定位导弹炸张三。在发射之前我们需要精准锁定张三位置。然后我们就可以通过锁定的位置找到张三进行发射导弹。
- 指针也和定位导弹一样。指针就是李四。李四里面存储着张三的地址。知道了张三的位置后李四就可以找到张三并拿走10块钱。
*李四 = 0;//这样就轻松的把张三的十块钱拿走了。
❤️一级指针
整型指针
int a = 10 int* p = &a;
- p是整型指针-指针类型为int*-我们也把p叫做指向整型a的指针- 整型指针存放的是整型的地址
浮点型指针
float* p;
- p是float型指针-指针类型为float*-我们把p也叫做指向浮点型的指针-浮点型指针存放的浮点型的地址
字符指针
- 以此类推
char* p
- p的指针类型是char*-p是指向字符的指针-字符指针存放的是字符的地址
总结
- 指针的标志符号是“*”号
- 指针类型是int*, float*, double*, char* ,一类的,反正都要加*号。
- 指针指向的是一个值。
❤️指针数组
- 其实我想直接叙述数组指针的概念的,不想提这个指针数组的,因为这两个词刚好颠倒过来,容易搞迷糊,但是不提的话,又叙述不明白。所以我又加了这个关于数组的东西。
- 要点:指针数组就是数组
数组的类型是什么?
- 先看看以下变量的类型是什么。
int a = 10; 整型变量a的类型是 int float a = 10;浮点型a的类型是 float int* p = &a;指针变量p的类型是 int*
那么一个数组arr的类型是什么呢?
int arr[5]={1,2,3,4,5};
arr是数组的名字,也就是数组名。很多人会以为数组的类型是int,但他的类型是int[5]
是的,他的类型的确是int[5],而arr数组里的每个元素的类型才是int。
int arr[5]的含义是:在arr数组中有五个元素,每个元素的类型是int。而arr数组的类型是int[5]。
这些在vs的监视窗口中都是可视的。
指针数组到底是指针还是数组?
- 判断他是数组还是指针关键在于后两个字。后两个字是数组他就是数组。
- 首先他是个数组,我们可以先创建一个整型数组arr[5].
int arr[5];
- 然后他是指针数组,只需要在arr[5]前面加上“*”号就可以了。因为星号是指针的标志
int* arr[5]
那么指针数组的类型是什么?
- 打开vs的监视窗口
可以看到,指针数组的类型是int*[5]
,其中的五个元素的类型是int*
,而int*
的类型就是指针类型。说明指针数组里面的五个元素是指针,也就是地址。
总结
- 指针数组是一个数组
- 数组的每个元素的类型是指针类型
- 整型数组的类型是
int[]
,整型指针数组的类型是int*[]
❤️数组指针
- 要点:数组指针本质还是指针,只需要看最后俩字就可以了。而指针说白了还是地址。
什么是数组指针?
- 首先,数组指针,数组指针,说到底还是个指针。
所以我们可以写为*p,来表明p是个指针 int* p;
- 第二,他是数组指针 ,如果你写为
int* p[5]
那就大错特错了,我们刚刚已经说过这是指针数组了。 - 因为
[]
的优先级大于*
,所以p先和[]
结合成数组,再和*
结合为指针,也就形成了指针数组。 - 现在我们要的是数组指针。所以应写为
int (*p)[5];
- 因为
()
的优先级大于[]
,所以*
先和p结合为指针。然后指针再和[5]
结合为数组。成为数组指针。 int (*p)[5]
的含义:定义了一个数组指针p,指针p里面存储的是数组的地址,也就是p指向了一个数组。
数组指针的类型是什么?
int (*p)[5]的类型是int[5]*
- 因为数组指针的本质还是指针,所以它需要一个
*
来表明它是指针。在前面加上数组的类型int[5]
就是数组指针了。 - 但我们平常书写数组指针的类型不这么写。而是写为
int (*)[5]
.。这是平时的大众写法。
总结
- 数组指针是指针,储存的是数组的地址,指向一个数组,而数组的每个元素是int型。
- 数组指针的类型是
int (*)[]
. - 指针数组的类型是
int* []
. - 二者的类型区别就在于
()
的优先级
❤️二级指针
什么是二级指针?
- 要点:指针的指针就是二级指针。也就是指针的地址
int a = 10; int* p = &a;//p是一级指针 int** p1 = &p//p1是二级指针
- a的地址存储在p中,p的地址存储在p1中。
- 所以p是一级指针,p1是二级指针。
❤️函数指针
什么是函数指针?
- 由上面的整型指针,字符指针,数组指针的铺垫,我们可以推断出来函数指针是什么。
- 只用看后两个字,后两个字是指针,他就是指针,指针就是地址。
- 要点:函数指针是一个指向函数的指针-指针里面存储的是函数的地址
函数指针怎么表示
- 首先,他是指针,我们就先创建一个整型指针。
int *p;
- 其次,他是函数指针,我们还需要一个
()
来表示它是函数,因为函数的标志是()
,比如我们的main()
函数。 - 所以要写为
int *p()
, 但这样写是错的,因为()
的优先级大于*
- 所以正确写法为
int (*p)()
.这就是函数指针。
函数指针的类型是什么?
- 我们模仿数组指针。
- 函数指针的类型也就是
int (*)()
。
总结
- 最后我想再次强调一下,指针就是地址。
如果你觉得我的文章对你有帮助
🎉欢迎关注🔎点赞👍收藏⭐️留言📝。