C语言—————指针(1)

今天,我们就开始了解指针。

1.内存与地址

       在了解指针之前,我们得先了解一下计算机里的内存和地址。

        内存可以理解为是一种内容存储器,计算机上的CPU(中央处理器)在处理数据的时候,需要从内存中读取数据,处理后的数据也会放回内存中。往返,这样就需要对内存中的数据进行有效管理,那计算机是怎样进行管理的呢?其实很简单,计算机将内存划分为许多一个个的内存单元,每个内存单元的大小为一个字节(1 byte)。

        说到这我们就扩展介绍一下常见的计算机的内存存储单位以及其中的换算规律

412dd4ccd8de4fb7ba2f6174c9852513.png2d75b06d305048aa9c0874ce9a41f3e7.png

        在上面的介绍中我们可以知道内存存储单位最小为比特位(bit),而其中存放着一个二进制的1或0,在对内存有了一个合理的划分后,就要对每个内存单元进行编号,而这所谓的编号就是地址,在C语⾔中我们给地址起 了新的名字叫:指针。这样CPU就可以通过指针快速的找到⼀个内存空间,从而进行数据的输入输出。

        其实,在程序中一个变量的创建就是在向内存申请空间,并且通过变量类型的存储大小来分配空间如 int类型的变量的存储大小为4字节,char 类型变量的存储大小为1字节。

ba4e9cacee784a189ee11ee8441741a2.png

2.取地址操作符(&)

         现在我们尝试去看看变量地址,那我们要如何才能拿到一个变量的地址呢?到这我们就需要学习⼀个操作符(&)——取地址操作符。

         关于取地址操作符(&),顾名思义,就是用来获取地址的一个操作符。

具体运用:

bdec057372fb42c68a6b6fa729310940.png

注意:这里地址的打印需要用 %p

 

        那我们拿到这些变量的地址有什么用呢?可以这样想,拿到地址我们就可以快速的访问到该地址上的数据。

3.指针变量

       那我们通过取地址操作符(&)拿到的地址是⼀个数值,如:0000005E12B2FBB4,这个数值有时候也是需要 存储起来,方便后期再使用的,那我们把这样的地址值存放在哪⾥呢?
       这样我们就要介绍一个新的变量——指针变量。这种变量就是⽤来存放地址的,存放在指针变量中的值都会理解为地址。
 
具体运用:
 

37a83e252b494c18896a02b106fe69da.png

        这里将一个变量的地址存入一个指针变量中也做指向,比如上面的p指针变量就是一个指向a的一个指针变量。

9969abe9ed53409a8d65b66d1b91a7ea.png

 
        指针变量(p,p1)既然是一种变量,那同样也是有类型的。如上:p的类型就是 int*、p1 的类型为char*。当然,指针变量的类型可不止上面两种。
 
        那如何理解这些类型呢?其实也很简单,以上面的p指针变量为例,p的类型为 int* ,其中 * 可表示p是一个指针变量,而前面的 int 是在说明 p 存储的地址上是一个int类型(整型)变量,同样也可以理解为 p 指向着一个int类型(整型)变量,也就是a。

4.指针变量的解引用

        接下来,我们有了指针变量后,就要学习有关指针变量的操作。其中最重要的就是对指针变量的解引用,也就是通过指针变量存储的地址来找到其所指向的变量。
       这里我们要通过解引用操作符 ( * ) 来进行解引用。
具体运用:
 

73adf16f62054946a5acd4bc7d6ef7a5.png

其实,在这里我们就可以认为*p就是a了。

---------------------------------------------------------------------------------------------------------------------------------

趣味点:

       内存地址是连续的可进行 + - 变换
 

9268d5c91dfb4d488224caa649f3e27f.png

运行结果为:

916f7fea8b794dc6846008cb58a5272d.png

 
          从上面我们可以看出, char* 类型的指针变量+1跳过1个字节, int* 类型的指针变量+1跳过了4个字节。
       这就是指针变量的类型差异带来的变化。指针+1,其实跳过1个指针指向的元素。指针可以+1,那也可以-1。
 

dbeb4dc93b3c4c5e9b97ecf0b6c964b4.png

 
结论:指针的类型决定了指针向前或者向后⾛⼀步有多⼤(距离)
 
 

 

dc42af7b70b440c2853a23118075918f.png

        感谢观看(^.^)

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值