对指针变量取地址_C语言零基础入门指针02

C语言零基础入门-指针-02

本节要点:

1,指针与指针变量。

2,指针变量的使用。

3,通过指针变量找到原始数据。


01. 指针与指针变量

由第一节我们简单说明了一下什么是指针,并且也知道了取地址符号(&)的用法,接下来我们就要缕一缕一些概念性的东西了,可能会有点绕,你要细品,细品。

如题,我们要深入的了解一下什么是指针,什么是指针变量。

  • 指针:是一个具体的数据,这个数据就是地址。

  • 指针变量:是一个变量,它用来存放数据的(也就是存放指针的)。

指针变量是一个类似于我们之前学过的整型变量那样的一个变量,唯一区别就是:整形变量存放的是整形数据,指针变量存放的是指针类型的数据。

一句话:指针变量是一个变量,他里边存放的数据是指针类型。

(相比较整形:整形变量是一个变量,他里边存放的数据是整数类型。)

多理解理解,不难的。

02. 指针变量的使用

前面说了指针变量与整形变量都一样,是一个数据类型而已。因此这个数据类型我们也要学着使用它。

02.1 定义与使用

我们先来说一下指针的格式化定义与使用,这里先不要忙着敲代码,先把原理讲明白了。

我们先来回顾一下整数的定义:

int i = 300 ; 这里定义了一个整形变量 i,他存储的数据是 300,他在内存中的样子是这样的。

2b45daac64f132bbaa1e654163897f0a.png

6d1c388179103f1bccef531d94802ca5.png

整数300存放在地址为112233的位置(假设的位置),并且我们给这个位置取了一个名字叫做 i,于是我们访问这个地址上的数据的时候就可以直接使用i了。

指针变量的定义:

指针变量的定义是在变量名前边加上一个*即可。

int *p = &i ; 这里定义了一个指针变量p(直接在变量名p前边加上*即可),并且这个指针变量中存放的指针(我们说了指针就是数据集)就是变量i的地址(取地址符号&的作用就是得到变量的地址)。它的具体存放如下:

2b45daac64f132bbaa1e654163897f0a.png

16121ab6a0608874aa4d5a761fbc265a.png

首先我们定义了一个整数型的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);}

结果:

因为每个程序分配地址的时间以及本机使用情况都不一样,所以大家运行得到的地址与我的肯定不一样。

2b45daac64f132bbaa1e654163897f0a.png

bdfdcc7c81196939b51b9f4c7ddb4ea5.png

解释:

2b45daac64f132bbaa1e654163897f0a.png

2c06c46c42b5fdb28b7fa3855feb0733.png

我们发现直接输出的i的地址与输出p的内容是一样的,因为p存放的就是i的地址吖。

内存分配图如下:

2b45daac64f132bbaa1e654163897f0a.png

729af9af258d43065f11f9ead617959d.png

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);}

结果:

2b45daac64f132bbaa1e654163897f0a.png

dab322c50c4b217447690f3a889250ff.png

解释:

我们先定义了一个变量i,他里边存放的数据是300。在定义了一个指针变量p,他里边存放的是i的地址。

然后我们使用以前的方式,直接通过变量名i输出一下i中存放的数据300。

然后在使用地址p,通过*p得到地址p中存放的数据300。

我们之前可以直接通过变量名i中修改i的数据,同理我们可以通过地址p修改地址p中存放的数据。

于是通过*p就可以把地址p中的内容修改为400。

04. 总结

通过以上的内容我们可以总结出一下一些内容:

  • 可以通过取地址符号&得到一个变量的地址。

  • 可以通过*得到一个指针变量所指向的地址中的数据。

好好理解,好好消化,指针很重要。

b006cda08d70e4a2159dfbfe6c506c0b.png

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值