谭C之8.1---指针是什么

学习指针之前,首先需要理解,数据在内存中的存取过程:

当在程序中定义了一个变量,在对程序进行编译时,系统就会自动给这个变量分配内存单元。

编译系统根据程序中定义的不同的变量类型,给其分配相对应的长度空间。

如:

        整型数据类型变量,系统分配4个字节的内存空间;

        单精度浮点型类型变量,系统分配4个字节的内存空间;

        字符类型变量,系统分配1个字节的内存空间;

内存区的每一个字节,均有一个编号,这个编号就是------地址

顾名思义,地址就是一个地方具体的空间位置。

那么在c语言中的地址,同样也代表着,计算机内部广阔的存储空间中,一个具体的内存单元空间的位置。

把计算机当作一个豪华酒店,计算机内存单元就相当于是酒店房间,内存单元地址就相当于是房间编号,内存单元中存放的数据就相当于是房间中的客人。

通过地址能找到所需要的内存单元(也称变量单元),可以说之为,地址指向该内存单元。

例如,房间号0618,即该房间的地址为0618,或者说0618 “指向” 该房间。因此,可以将地址形象化地称为 “指针” 。 意思是通过它能找到以它为地址地内存单元。

说明:

        数据分不同类型,其大小(字节数量)和存储方式也不同(整数以补码形式存放,实数以指数形式存放)。因此为了有效地存取一个数据,除了需要位置(地址)信息,还需要该数据的类型信息。若二者缺其一,则无法有效对数据进行存取。

        C语言中的地址,准确来讲,包含两层信息:

                1、位置信息,即内存编号,或称纯地址。

                2、地址所指向的数据的类型信息,是整型、浮点型、还是其他类型。

存储单元的地址是该单元在内存中的编号,是一个值,是一个指引。

存储单元的内容是该单元中所存在的数据信息,可以是整型数据,浮点数据等各种数据类型。

注意:对变量的访问都是通过地址进行的。

        访问方式有两种:

                直接访问:直接按变量名进行的访问。

                   假设定义整型变量i,j,k, 则当程序编译时,系统自动为ijk三个整型变量,按照整型存储方式,分别给它们分配4个字节大小空间,与此同时,建立了变量名和地址的对应表。若要访问三个变量的值,则直接通过其变量名,进行访问即可。

                    例如语句:printf("%d\n",i); 

                    其含义就是通过变量名,找到相应的地址,并从该变量表示的4个字节中,按照整型数据的存储方式读出整型变量i的值,然后按照十进制整数格式输出。

                间接访问:即将变量 i 的地址存放在另一个变量中,然后通过该变量来找到变量 i 的地址,从而访问 i 变量。

                        假设定义一个变量i_pointer(变量名可任取),用来存放整型变量的地址。可以通过下面的语句将i的地址(2000)存放到i_pointer中。

                        i_pointer=&i;//将i的地址存放到i_pointer中去。此时,i_pointer的值就是2000(即变量 i 所占单元的起始地址)。

为了表示将数值3送到变量中,可以有两种表达方式:

(1)将3直接送到变量i所标识的单元中,例如“i=3;”。

(2)将3送到变量i_pointer所指向的单元(即变量i的存储单元),例如“*i_pointer=3;”,其中*i_pointer表示i_pointer指向的对象。

如图所示

 指向就是通过地址来体现的。通过地址找到指定的变量单元,因此说,地址指向该变量单元。

所以可以将地址形象的称之为 “ 指针 ”。

上面说了一大堆,就是为了引出这玩意儿!!!

如果一个变量专门用来存放另一个变量的地址(即指针),则它称之为“ 指针变量 ”。上述的i_pointer就是一个指针变量。指针变量就是地址变量,用来存放地址,指针变量的值是地址(即指针)

                        

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值