代码改变世界

c语言的精髓4

2016-08-11 20:38  威震天1606  阅读(240)  评论(0编辑  收藏  举报

c语言中,调用函数和被调用函数之间的数据可以通过三种方式进行传递:
  (1)实在参数和形式参数之间进行数据传递。
  (2)通过return 语句所函数值返回调用函数。
  (3)通过全局变量。但这不是一种好的方式,通常不提倡使用。
  在C语言中,数据只能从实参单向传递给形参,称为“按什”传递。也即是说,当简单变量作为实参时,用户不可能在函数中改变对应实参的值。

在程序中,一个变量实质上是代表了“内存中的某个存储单元”。那么C程序是怎样存取这个存储单元的内容的呢?
  应该知道,计算机的内存是以字节为单位的一片连续的存储空间,每一个字节都有一个编号,这个编号就称为内存地址。就像旅馆的每个房间都有一个房间号一样,如果没有房间号,旅馆的工作人员就无法进行管理。同样的道理,没有内存字节的编号,系统就无法对内存进行管理。因为内存的存储空间是连续的,内存中的地址号也是连续的,并且用二进制数来表示,为了直观起见,在这里我们将用十进制进行描述。
  若在程序中定义了一个变量,C编译系统就会根据定义中变量的类型,为其分配一定字节数的内存空间(在VC6.0中short int 型数据占2字节、int型数据和float型数据占4字节、double型数据占8字节、char型数据占1字节、指针变量占4字节),此后,这个变量的内存地址也就确定了。例如,若有定义:short int a,b;float x;这时,将如图8.1所示:系统为a和b各分配2个字节的存储单元,为x分配4个字节的存储单元,图中的数字只是示意的字节地址。每个变量的地址是指该变量所占存储单元的第一个字节的地址。在这里,我们称a的地址为1012,b的地址为1015,x的地址为1201
  

  一般情况下,我们在程序中只需指出变量名,无需知道每个变量在内存中的具体地址,每个变量与具体地址的联系由C编译系统来完成。程序中我们对变量进行存取操作,实际上也就是对某个地址的存储单元进行操作。这种直接按变量的地址存取变量值的方式称为“直接存取”方式。