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

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

目录

前言

❤️指针

理解指针的两个要点

为什么用指针这个名词来称呼?

❤️一级指针

整型指针

浮点型指针

字符指针

总结

❤️指针数组

数组的类型是什么?

指针数组到底是指针还是数组?

那么指针数组的类型是什么?

总结

❤️数组指针

什么是数组指针?

数组指针的类型是什么?

总结

❤️二级指针

什么是二级指针?

❤️函数指针

什么是函数指针?

函数指针怎么表示

函数指针的类型是什么?

总结

前言

❤️ :热爱编程学习,期待一起交流。

🙏:博主是河牧院大一在读学生,水平有限,如发现错误,期待指点!

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

总结

  • 最后我想再次强调一下,指针就是地址。

如果你觉得我的文章对你有帮助

🎉欢迎关注🔎点赞👍收藏⭐️留言📝。

相关文章
|
7月前
|
存储 安全 编译器
【C++专栏】C++入门 | auto关键字、范围for、指针空值nullptr
【C++专栏】C++入门 | auto关键字、范围for、指针空值nullptr
77 0
|
7月前
|
存储 C语言 C++
c语言从入门到实战——数组指针与函数指针
数组指针和函数指针都是指针类型,但是它们指向不同的数据类型。 数组指针:数组指针指向的是数组类型。 函数指针:函数指针指向的是函数类型。 数组指针和函数指针是C语言中的两种重要指针类型。数组指针指向一个数组,可以用来访问和修改数组中的元素;而函数指针则指向一个函数,可以用来调用该函数。两者在语法和用法上有所不同,需要仔细区分。正确理解和使用它们可以提高程序的效率和可维护性。
59 0
|
7月前
|
存储 安全 编译器
c语言从入门到实战——初识指针
C语言指针是一种变量,它存储了另一个变量的内存地址。通过指针,我们可以直接访问内存中的数据,从而实现灵活的数据操作。 指针是编程中的一个概念,它存储的是内存地址,指向某个变量。通过指针,可以直接访问和操作内存中的数据,提高程序效率。但使用指针时需小心,避免空指针和野指针等问题,确保程序安全稳定。
82 0
|
10天前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
59 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
2月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
39 2
|
4月前
|
存储 安全 编译器
C++入门 | auto关键字、范围for、指针空值nullptr
C++入门 | auto关键字、范围for、指针空值nullptr
70 4
|
4月前
|
Go 计算机视觉
Go从入门到放弃之指针
Go从入门到放弃之指针
|
5月前
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
7月前
|
算法 测试技术 容器
【刷题】双指针入门
经过这四道题目的洗礼,我大概对双指针有了初步印象,接下来我会继续努力!!!
80 13
【刷题】双指针入门
|
7月前
入门后指针进阶习题深度分析
入门后指针进阶习题深度分析
42 1