清华大学出版社 TSINGHUA UNIVERSITY PRESS 都是通过地址进行的。例如,printf(%D”,)的 执行是这样的:根据变量名与地址的对应关系(这 个对应关系是在编译时确定的),找到变量的地址 2000,然后从由2000开始的两个字节中取出数据 (即变量的值3),把它输出。输入时如果用 scanf("%D",&i),在执行时,就把从键盘输入 的值送到地址为2000开始的整型存储单元中。如 果有语句“k=i+j”,则从2000、2001字节取出的 值(3),再从2002、2003字节取出i的值(6),将它们 相加后再将其和(9)送到k所占用的2004、2005字节 单元中。这种按变量地址存取变量值的方式称为 “直接访问”方式
都是通过地址进行的。例如,printf(“%D”,i)的 执行是这样的:根据变量名与地址的对应关系(这 个对应关系是在编译时确定的),找到变量i的地址 2000,然后从由2000开始的两个字节中取出数据 (即变量的值3),把它输出。输入时如果用 scanf("%D",&i),在执行时,就把从键盘输入 的值送到地址为2000开始的整型存储单元中。如 果有语句“k=i+j”,则从2000、2001字节取出i的 值(3),再从2002、2003字节取出j的值(6),将它们 相加后再将其和(9)送到k所占用的2004、2005字节 单元中。这种按变量地址存取变量值的方式称为 “直接访问”方式
清华大学出版社 TSINGHUA UNIVERSITY PRESS 还可以采用另一种称之为“间接访问”的方式,将 变量的地址存放在另一个变量中。按C语言的规 定,可以在程序中定义整型变量、实型变量、字 符变量等,也可以定义这样一种特殊的变量,它 是存放地址的。假设我们定义了一个变量i-pointer,. 用来存放整型变量的地址,它被分配为3010、3011 字节。可以通过下面语句将的刂?2000)存放到i- pointer中。 i-pointer=&i; 这时,i-pointer的值就是2000,即变量所占用单元 的起始地址。要存取变量的值,也可以采用间接 方式:先找到存放“的地址”的变量,从中取出i 的地址(2000),然后到2000、2001字节取出的值 3)
还可以采用另一种称之为“间接访问”的方式,将 变量i的地址存放在另一个变量中。按C语言的规 定,可以在程序中定义整型变量、实型变量、字 符变量等,也可以定义这样一种特殊的变量,它 是存放地址的。假设我们定义了一个变量i-pointer, 用来存放整型变量的地址,它被分配为3010、3011 字节。可以通过下面语句将i的刂?2000)存放到ipointer中。 i-pointer=&i; 这时,i-pointer的值就是2000,即变量i所占用单元 的起始地址。要存取变量i的值,也可以采用间接 方式:先找到存放“i的地址”的变量,从中取出i 的地址(2000),然后到2000、2001字节取出i的值 (3)
清华大学出版社 TSINGHUA UNIVERSITY PRESS 打个比方,为了开一个A抽屉,有两种办法,一种 是将A钥匙带在身上,需要时直接找出该钥匙打开 抽屉,取出所需的东西。另一种办法是:为安全起 见,将该A钥匙放到另一抽屉B中锁起来。如果需 要打开A抽屉,就需要先找出B钥匙,打开B抽屉, 取出A钥匙,再打开A抽屉,取出A抽屉中之物, 这就是“间接访问”。图10.2是直接访问和间接访 问的示意图
打个比方,为了开一个A抽屉,有两种办法,一种 是将A钥匙带在身上,需要时直接找出该钥匙打开 抽屉,取出所需的东西。另一种办法是:为安全起 见,将该A钥匙放到另一抽屉B中锁起来。如果需 要打开A抽屉,就需要先找出B钥匙,打开B抽屉, 取出A钥匙,再打开A抽屉,取出A抽屉中之物, 这就是“间接访问”。图10.2是直接访问和间接访 问的示意图
清华大学出版社 TSINGHUA UNIVERSITY PRESS 2000 i pointer 2000 2000 图10.2
图10.2
清华大学出版社 TSINGHUA UNIVERSITY PRESS 为了表示将数值3送到变量中,可以有两种表达方法: (1)将3送到变量所标志的单元中。见图10.2上。 (2)将3送到变量i-pointer)所“指向”的单元(即i所标 志的单元)中。见图10.2下。 所谓“指向”就是通过地址来体现的。i-pointer中的 值为2000,它是变量的地址,这样就在i-pointer和 变量之间建立起一种联系,即通过i-pointer能知道i 的地址,从而找到变量的内存单元。图10.2中以箭 头表示这种“指向”关系。 由于通过地址能找到所需的变量单元,我们可以说, 地址“指向”该变量单元(如同说,房间号“指向 “某一房间一样)。因此在C语言中,将地址形象化 地称为
为了表示将数值3送到变量中,可以有两种表达方法: (1) 将3送到变量i所标志的单元中。见图10.2上。 (2) 将3送到变量i-pointer所“指向”的单元(即i所标 志的单元)中。见图10.2下。 所谓“指向”就是通过地址来体现的。i-pointer中的 值为2000,它是变量i的地址,这样就在i-pointer和 变量i之间建立起一种联系,即通过i-pointer能知道i 的地址,从而找到变量i的内存单元。图10.2中以箭 头表示这种“指向”关系。 由于通过地址能找到所需的变量单元,我们可以说, 地址“指向”该变量单元(如同说,房间号“指向 “某一房间一样)。因此在C语言中,将地址形象化 地称为