前言
C语言哪个部分最难?大部分人的答案便是指针。C语言作为一门经典的编程语言,它的设计哲学是简单、高效、灵活。在C语言中,指针是一个非常重要和强大的功能。拥有强大功能的同时,对我们要理解它所花费的时间也就越多。最近小编也是在进阶C语言高手路途中碰上了指针这个大难题。以下我的学习笔记将记录我的学习进度以及内容,在此分享给大家,来帮助大家理解指针。
为什么需要指针?
- 高效的内存访问:直接通过内存地址访问变量比通过变量名访问要快得多。指针可以让我们直接访问和操作内存,提高了程序的运行效率。
- 数据结构的实现:许多数据结构(如链表、树、图等)依赖于指针来实现。指针使得我们能够有效地链接不同的元素,从而实现复杂的数据结构。
- 函数参数传递:通过指针,我们可以在函数调用时传递变量的地址,这样函数就能直接修改变量的值,而不是创建一个局部副本。这在处理大数据结构时特别有用。
1.指针的基本概念
1.1什么是指针
在编程中,创建变量其实就是向内存申请空间,比如:
上述的代码就是创建了整型变量a,内存中申请4个字节,⽤于存放整数10,其中每个字节都
有地址,上图中4个字节的地址分别是:
1.0x000000670711F5D4
2.0x000000670711F5D5
3.0x000000670711F5D6
4.0x000000670711F5D7
这些地址就是变量a在内存中随机申请的,任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。
1.2指针变量和解引用操作符(*)
1.2.1指针变量
那我们通过取地址操作符(&)拿到的地址是⼀个数值,⽐如:0x006FFD40,这个数值有时候也是需要存储起来,⽅便后期再使⽤的,那我们把这样的地址值存放在哪⾥呢?答案是:指针变量中。
比如:
指针变量也是⼀种变量,这种变量就是⽤来存放地址的,存放在指针变量中的值都会理解为地址。
1.2.2解引用操作符(*)
既然我们将地址保存在指针变量中,以后肯定是要去使用的,那怎么使用呢?
在现实⽣活中,我们使⽤地址要找到⼀个房间,在房间⾥可以拿去或者存放物品。
C语⾔中其实也是⼀样的,我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针)指向的对象,这⾥必须学习⼀个操作符叫解引⽤操作符(*)。
上述代码的第5行就使⽤了解引⽤操作符,*p的意思就是打开封装在p指针的地址,并找到它指向的空间,来改变a变量。这里的*p其实就是a变量了,所以*p=20;就是把a变成了20;
其实这⾥是把a的修改交给了a来操作,这样对a的修改,就多了⼀种的途径,写代码就会更加灵活。
2.指针的运算
指针的基本运算有三种,分别是:
- 指针+-整数
- 指针-指针
- 指针的关系运算
这里指针的运算可以类比为我们生活中的日期,那整数就可以认为是天数。
2.1指针+-整数
日期+-天数得到结果还是日期,那么指针+-整数是不是也应该还是指针呢?
因为数组在内存中是连续存放的,只要知道第⼀个元素的地址,顺藤摸⽠就能找到后⾯的所有元素。
这段代码的作用其实就是打印数组中的元素。结果为:
2.2指针-指针
日期-日期的结果是天数,那么指针-指针的结果是不是应该是整数呢?
这个整数代表的就是指针与指针的元素间隔。
上面的代码是利用了指针来模拟实现strlen的功能,结果是:
2.3指针的关系运算
结果是:
更多的指针知识待小编再学习学习,如果觉得对你有帮助就动动小手点个赞叭!!!