全面剖析《指针》,实现《指针》入门

前言

❤️ :热爱编程学习,期待一起交流。
🙏:博主是河牧院大一在读学生,水平有限,如发现错误,期待指点!

  • 在《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 (*)()

总结

  • 最后我想再次强调一下,指针就是地址。
  • 如果你觉得我的文章对你有帮助
    🎉欢迎关注🔎点赞👍收藏⭐️留言📝。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>