C语言零基础入门-指针-02
本节要点:
1,指针与指针变量。
2,指针变量的使用。
3,通过指针变量找到原始数据。
01. 指针与指针变量
由第一节我们简单说明了一下什么是指针,并且也知道了取地址符号(&)的用法,接下来我们就要缕一缕一些概念性的东西了,可能会有点绕,你要细品,细品。
如题,我们要深入的了解一下什么是指针,什么是指针变量。
指针:是一个具体的数据,这个数据就是地址。
指针变量:是一个变量,它用来存放数据的(也就是存放指针的)。
指针变量是一个类似于我们之前学过的整型变量那样的一个变量,唯一区别就是:整形变量存放的是整形数据,指针变量存放的是指针类型的数据。
一句话:指针变量是一个变量,他里边存放的数据是指针类型。
(相比较整形:整形变量是一个变量,他里边存放的数据是整数类型。)
多理解理解,不难的。
02. 指针变量的使用
前面说了指针变量与整形变量都一样,是一个数据类型而已。因此这个数据类型我们也要学着使用它。
02.1 定义与使用
我们先来说一下指针的格式化定义与使用,这里先不要忙着敲代码,先把原理讲明白了。
我们先来回顾一下整数的定义:
int i = 300 ;
这里定义了一个整形变量 i,他存储的数据是 300,他在内存中的样子是这样的。
整数300存放在地址为112233的位置(假设的位置),并且我们给这个位置取了一个名字叫做 i,于是我们访问这个地址上的数据的时候就可以直接使用i了。
指针变量的定义:
指针变量的定义是在变量名前边加上一个*
即可。
int *p = &i ;
这里定义了一个指针变量p(直接在变量名p前边加上*
即可),并且这个指针变量中存放的指针(我们说了指针就是数据集)就是变量i的地址(取地址符号&
的作用就是得到变量的地址)。它的具体存放如下:
首先我们定义了一个整数型的i,他存放的数据是300,他的地址是112233。
紧接着我们又定义了一个指针类型的p,他存放的数据是i的地址112233,他的地址是223344(这个地址是我假设的)。
所以我们就明白了,指针变量与int一样只是一个数据类型,只不过指针变量存放的数据是地址而已。值得注意的是,指针变量也会在计算机内部存放,他也有自己的地址,并且我们给这个地址起个名字叫做p,于是变量p中存放的数据我们就可以直接输出。具体见以下程序:
02.2 程序说明
这个程序就说明一下上边提到的那个情况。
#includevoid main(){ int i = 300; int *p = &i; printf(" i 中存放的数据是:%d\n",i); printf(" i 的地址是:%d\n",&i); printf(" p 中存放的数据是:%d\n",p); printf(" p 的地址是:%d\n",&p);}
结果:
因为每个程序分配地址的时间以及本机使用情况都不一样,所以大家运行得到的地址与我的肯定不一样。
解释:
我们发现直接输出的i的地址与输出p的内容是一样的,因为p存放的就是i的地址吖。
内存分配图如下:
03. 通过指针变量找到原始数据
我们上边介绍的是怎么得到普通类型(int,float等等普通类型)的地址。并且把他们的地址存放在指针变量中。
大家回忆一下,我们之前使用一个数据,都是通过他的变量名进行使用的,比如:
int i=80;i=90;
我们先定义了一个数据为90的变量i,下边我们可以直接使用变量名i将数据刚改为90,这个操作就会把变量i之前的地址上的数据从80,修改为90。
这个时候我们应该想到,既然我们已经得到了一个数据的地址,那么我们是不是可以直接使用地址,而不是使用变量名,来操作这个地址中的数据呢?
接下来,我们就讲一讲如何通过地址得到数据。
03.1 定义与使用
我们刚才得到地址使用的是取地址符号&
,这里我首先告诉大家,我们在一个指针变量上使用*
符号就可以得到这个地址中存放的内容。如下:
#includevoid main(){ int i = 300; int *p = &i; printf(" 直接输出 i 中存放的数据是:%d\n",i); printf(" 使用地址得到 i 中存放的数据是:%d\n",*p); *p = 400; printf(" 使用地址修改 i 中存放的数据是:%d\n",i);}
结果:
解释:
我们先定义了一个变量i,他里边存放的数据是300。在定义了一个指针变量p,他里边存放的是i的地址。
然后我们使用以前的方式,直接通过变量名i输出一下i中存放的数据300。
然后在使用地址p,通过*p
得到地址p中存放的数据300。
我们之前可以直接通过变量名i中修改i的数据,同理我们可以通过地址p修改地址p中存放的数据。
于是通过*p
就可以把地址p中的内容修改为400。
04. 总结
通过以上的内容我们可以总结出一下一些内容:
可以通过取地址符号
&
得到一个变量的地址。可以通过
*
得到一个指针变量所指向的地址中的数据。
好好理解,好好消化,指针很重要。