C语言指针重点问题解析🍐
问题引入
在C语言中,指针的学习的是极其重要的,但是有许多初学者刚刚接触指针非常困惑,一个字形容,就是“懵”,指针之所以对初学者来说有些难理解,是因为指针是一个很抽象的东西,会让很多人产生疑问,为什么要用指针?指针的使用有哪些规则?为什么指针的定义和用法那么让人看不懂?明明可以直接使用该变量,为啥要多加一步去使用指针呢?等等之类的问题,我在刚开始学习时也有过这些问题,下面,让我们通过一些举例来一一解答这些问题吧,并对指针进行深入学习吧!
具体解答
- 既然学习指针,那么首先要思考的问题就是“什么是指针”。要弄懂概念,必须要理解,我对指针的理解就是地址,对,就是这么简单,指针==地址。是不是一下让复杂的问题简单化了。有些同学在刚接触指针时,特别是看到代码时,就看不懂,这里建议一开始的时候不要去看代码,先通过这篇文章所介绍的内容对指针有一个比较深刻的理解,之后再通过代码去多加练习,关于代码的书写规范,下面也会讲到。
指针的表现
让我们从几个指针体现比较典型的例子开始。
- 指针指向单个元素的地址
比如以下一段代码
int n = 10;
int* p;
p = &n;
通过p = &n;这个操作,我们使p指向了元素n所在的地址,也就是把n的地址赋给了p,假如通过p,我们就可以使用元素n了,并且通过p找到的n是n本体,而不是复制一份新的等于n的数据!这一点要注意,使用指针找到的元素都是本体,而不是复制一个副本;
- 指针指向数组的地址
比如一下一段代码
int array[10]={0};
int* p;
p = array;
通过p = array;这个操作,我们把array的地址赋给了p,之后我们可以通过*(p+i)的方法找到array数组中的元素(i是下标);
指针的使用规则
- 必须有所指向
使用指针之前一个最基本的规则,也是必须必须坚持的原则就是要让该指针有所指向,有所指向的意思就是,让该指针指向一个明确的地址,一个没有指向地址的指针是十分危险的,也就是我们所说的野指针,它可能会导致无法预估的错误出现!
书写规范
通常我们需要先定义一个指针(这里就拿整型数据做示例)
~~~c
int* p;
~~~
然后让该指针指向我们需要指向的位置(比如让它指向数组a)
~~~c
int a[10]={0};
p = a;
~~~
如果想通过指针使用数据的话,就是需要做如下操作(此处拿遍历做演示)
~~~c
for(int i = 0;i < 10; i++)
printf("%d ",*(p+i));
~~~
好了,到这里一个最简单最基本的指针使用规范就介绍完毕了。
指针的作用
- 减少内存的使用
在前面我们就讲到过,通过指针取值的时候,我们取到的是这个数据本身,而不是复制另一个副本,因此在此过程中,不会造成多余的内存被分配出去,极大地减少了对空间的使用(在一些大的项目工程中,作用体现得会较为明显) - 快速传参
指针最常用的一个地方之一就是传参。在函数的参数传递时,通过指针进行传参是一个十分明智的选择,因为通过上一条我们讲过的,它不会产生副本,并且是对本体进行操作的,这就会有一个十分方便的特点,就是在函数内部进行的操作,不会随着函数的结束而消失,而是在原数据上进行了体现。其实通过指针的操作结果,就是对本体进行操作,因此修改指针对应的数据就是修改本体的数据。
关于指针的一些简单的介绍我们就到这里了,如果还有疑问的地方欢迎在评论区下方留言~