C语言初学学习笔记六

学习笔记五中我们介绍了关键字,#define定义的常量和宏,下面我们来了解一下C语言的一个学习重点——指针

 

要讲指针就必须先了解内存的概念。

内存

内存是电脑上特别重要的储存器,计算机中所有程序的运行都是在内存中进行的。就相当于一个储存空间,和现实生活中对于空间的使用,两者是十分相似的。

现实生活中当我们要访问一个空间的时候,给每一个地方都编了一个有效的地址,而地址又跟一个个房间是关联的,我们给每一个房间都是编号的。那么对于内存也是一样的,内存就相当于一块大的空间。那这里就会出现两个问题,1.内存是怎么编号的?2.一个内存单元是多大空间?

在生活中,我们讨论一个计算机是32位,64位机器,那这些32位,64位是什么意思。32位机器有32根地址线,地址线是物理线,它可以通电,通电的时候它的正电就是1,负电就为0。有正负电之分就产生了1/0这样的信号。我们把电信号转换为数字信号,这个时候就组成了由1和0组成的二进制序列。那32根地址线产生的二进制序列就有32个全0到32个全1,2^32个二进制序列。当一个这样的二进制序列成为一个内存编号的时候,我们就把这个编号称为这个内存的单元的地址。

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为内存单元的地址。

所以为了有效的使用内存,就把内存划分成一个个的内存单元,每个内存单元的大小是一个字节(byte)。

如下图,创建一个变量a,a在内存中要分配空间,就是4个字节,怎么看内存的情况呢?我们按f10调试以下,调试->窗口->内存,在地址栏里输入&a(取地址a),我们再打开监视窗口。输入&a,可以看到a取的是它的起始地址。

 打印&a,%p是专门用来打印地址的。这个&a拿出来也是一个值,那这个值要存起来。如下图二,pa就是用来存放&a的,在C语言中把pa叫做指针变量。pa是指针类型,它就应该写成int*。对于int*是怎么理解的呢?*说明pa是指针变量,而前面的int说明pa指向的对象是int类型的。由此,我们也可以得到图三创建char变量指针变量类型。

图一

图二

 图三

当我们能够拿到a的地址时,不仅仅是因为要把它存起来,而是想通过这个地址找到a。所以怎么找呢?如下图,*是解引用操作符,是个单目操作符。可以看到我们在找pa的地址同时也改变了a的地址。其实指针就是地址。pa是指针变量,它里面存的是地址,所以在使用这个指针变量的时候,就是使用存在它里面的地址。

 指针变量的大小

如图所示,指针的大小是相同的。为什么呢?指针是用来存放地址的,那么指针需要多大空间,取决于地址的存储需要多大空间。32位机器就是32个bit位,也就是4个byte。64位机器是64bit就是8个byte。那我们这里看到的4,是因为我们是32位平台。我们改成x64看看打印结果,如下图二所示。结论就是:指针大小在32位平台是4个字节,64位平台是8个字节。

图一

 图二

结构体

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

比如描述学生,学生包含:名字+年龄+性别+学号这几项信息。这里只能使用结构体来描述了。

结构体可以让C语言创建出新的类型出来。如下图一,创建一个学生类型的变量。创建一个结构体变量s并赋值,这样就是结构体的初始化。打印结果可以用结构体变量.成员变量。也可以如下图二所示,创建一个指针变量ps对s取地址。*ps解引用操作就等于变量s,就可以用第二种方法。也可以用->操作符,结构体指针->成员变量名的方式。

图一

 图二

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值