编程语言
首页 > 编程语言> > C语言程序设计第五版(谭浩强著)

C语言程序设计第五版(谭浩强著)

作者:互联网

第八章    善于利用指针

8.1  指针是什么

在说清楚指针是什么之前,我们先了解内存中的数据是如何存储是如何读取的

存储数据:定义一个变量p,编译时会为该变量p分配内存单元,再根据变量p的类型分配长度的空间也就是字节长度。(例如int类型分配4个字节,char类型分配一个字节)

内存中每一个字节都有一个编号,这就是“地址”。它相当于酒店的房间号,而内存中的数据就是酒店房间的旅客。我们可以通过房间号找到房间,那么地址指向我们定义的变量单元,我们将“地址”形象化地称为“指针”。

读取数据:获取位置信息和数据的类型信息。

地址(指针)包括位置(内存编号,也就是纯地址)和它指向的数据类型信息。也可说是“带类型的地址”。例如&p(p为int类型),我们应该定义为整型变量p的地址。整型说明存储4个字节,通过地址和类型信息我们可以对变量p进行数据的存和取。

思考题:若有int a和float b,如果先后分配放在2000开始的存储单元中,请问&a和&b的信息是一样的吗?答案是不相同的,存储编号相同,但类型信息是不同的。

存储单元的地址和存储单元的内容是两个不同的概念,例如:

假设程序已定义3个整型i,j,k。系统分配2000~2003的4个字节给变量i,2004~2007的4个字节给变量j,2008~2011的4个字节给k

在程序中一般是通过变量名来引用变量的值,例如:

printf("%d\n",i);
//系统分配了按整型存储方式的4个字节,并建立了变量名和地址的对应表。执行该语句,编译系统会通过变量名找到相应的地址,从该4个字节中按照整型数据的存储方式读取整型变量i的值,然后按十进制整数格式输出。

注意:通过上一例子,对变量的访问都是通过地址的方式进行。

访问方式分为直接访问和间接访问。

  1. 直接访问:通过取地址符&来访问地址。例  &i;这种直接按变量名访问,我们称为“直接访问”。
  2. 间接访问:通过将变量i的地址放在另一变量中,然后通过该变量来找到变量i的地址,从而访问i变量。
pointer = &i;
//定义一个变量pointer,用来存储整型变量i的地址。pointer的值就是2000(既是变量i所占单元的起始地址)

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

  1. 将数值3直接赋值给变量i的存储单元。 i =3;
  2. 将数值3送到变量pointer所指向的存储单元(即i的存储单元)如 :* pointer= 3;其中*pointer 表示pointer指向的对象。​​​​​​

指向是通过地址来体现的,由于通过地址来找到所需的变量单元,地址指向该变量的单元。

将地址形象化地称为“指针”;有一个变量专门用来存放另一个变量的地址,则它称为“指针变量”,上例中变量pointer就是一个指针变量。

指针变量就是地址变量,用来存放地址。指针变量的值就是地址(指针)。

注意:区分“指针”和“指针变量”这两个概念。指针--->是一个地址(如i的起始地址2000);指针变量--->是一个存放地址的变量,指针变量的值是指针(也就是地址)。

 

 

 

标签:变量,C语言,地址,谭浩强,整型,字节,第五版,pointer,指针
来源: https://blog.csdn.net/weixin_50756386/article/details/117230308