初识C语言(5)

十四、指针

十五、结构体

十四、指针

指针是我们C语言中最重要的知识点,大家听不懂没关系,因为我们现在只是初识,到后面才深入探究,大家不要害怕指针,其实有时候就是我们心里作用:可能感觉太难了呀,学不会,感觉很复杂。事实上没有这么复杂。

1、内存

要谈指针,首先我们要先了解一下内存,内存是电脑上特别重要的储存器,计算机中程序的运行都是在内存中进行的,什么意思呢?

假如我们买一个电脑,这个电脑上有CPU、内存、硬盘。CPU:中央处理器,计算机在处理数据的时候都是由CPU来计算和处理的。CPU处理的数据来自内存,内存里的数据来自硬盘。我们的文件、数据、电影是不是都存放在硬盘里,当真正去看电影的时候,去运行我们程序的时候,其实都是把硬盘的内容加载到内存,内存的数据交给CPU进行处理。大概就是这么简单的逻辑,相信大家可以理解。

如果现在有一块大的内存等待我们使用,我们该如何有效的管理我们的内存呢?给内存的每一个单元编一个号

像上面给内存单元一个一个编号,假如有一天我们要找一个内存编号,这时候我们有这个编号,就可以凭借这个编号很好的找到这个内存单元 ,所以我们就想到了:

内存空间为了有效的进行管理:
1.把内存划分为一个个有效的内存单元(1字节)
2.给每个内存单元编号 = 地址(我们日常说的地址,比如一个房间号)= 指针(这三个意思一样)
C语言把地址也叫指针。未来,只要指定了一个地址,通过地址就能找到对应的内存单元。

访问内存 - 首先得有地址,有了地址才能找到内存单元!!!

这里一共32根地址线,这是我们物理的电线,这时候我们地址线上传过来电信号的时候:

32位的机器上:简单理解为有32根地址线

每根地址线存有一个0或者1,下面是32根地址线产生的所以组合,因为每跟电信号传过来0或者1,所以当我们32根地址线上出来的这个二进制的可能性有这么多一共2^32次方种。

这个时候我们注意一下,我们把2^32次方种可能当成地址编号的话,一个编号就能找一个内存单元,这样的话我们算一下,如果我们有2^32次方个地址,1个地址管理一个字节,所以2^32次方个地址总共能管理4GB的空间。

&a可以拿到a的地址,a的地址也是个数字啊,就像10你想存起来放到a里面去,你专门要为10开辟一块空间才能存放10对不对,&a假设取出0x0012ff48这个地址,这个地址作为16进制是不是也要存储起来,假设定义一个变量叫pa,我们的pa是不是用来存放指针的(指针==地址==内存编号),所以我们就把pa这种变量叫做指针变量,a都有类型,所以我们的pa也要有类型,就叫int*。

我们也可以通过pa来改变a的值,他的意思是通过pa里面的地址找到a,然后把他的值改成20。

大家可能有疑惑了,为什么我能直接改变a,为什么还要搞出来一个指针呢?我们现在先不做讲解,只要知道这个事情不用我们自己干了,而是交给别人干。

 总结:
1. 内存会被划分以字节为单位的一个个内存单元
2. 每个内存单元都有编号,编号==地址==指针
3. C语言中创建的变量,其实是向内存申请一块空间,比如:int a = 10;就是向内存申请4个字节
的空间,每个字节都有地址
4. &a的时候,拿出的是4个字节中地址较小的那个字节的地址(编号)
5. 这个地址要存储起来,给一个变量,这个变量是用来存放地址(指针)所以叫指针变量:int* pa = &a;
6. pa中存放的是a的地址,要通过pa中的地址找到a,怎么写?*pa—> 通过pa中的地址找到a  
*pa=20 本质是修改a

2、指针变量的大小

先说为什么是8,因为我是在64位下面打印的,所以是8,正常32位下面是4,所以一个指针大小为4。现在另一个问题来了,大家有没有发现现在不管是什么类型,指针大小都是4。

因为指针变量是用来存放地址的,指针变量的大小,就取决于存放一个地址需要多大的空间。一个地址存起来是不是需要32个bit位,32个bit位就是4个字节,所以一个指针变量的大小是4个字节

指针变量的大小取决于地址的大小
32位平台下地址是32个bit位(即4个字节)
64位平台下地址是64个bit位(即8个字节)

十五、结构体

结构体是C语言特别重要的知识点,结构体使得C语言有能力描述复杂类型。

比如描述学生,学生包含:名字+年龄+性别+学号这几项信息

这里只能使用结构体来描述了

 

以上代码就是我们结构体创建,初始化,然后打印。

我们也可以把结构体初始化放到指针里面打印,代码如下

这里面我们用到了两个操作符

.     左边是结构体变量,右边是结构体成员

->   左边是结构体指针,右边是结构体变量

我们现在是初识,不用去研究太深,慢慢来,循序渐进。

今天就分享到这里,初识C语言已经结束了,后面就是详细的介绍每一个部分了,谢谢大家支持!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值