y=y*y; printf("(3)x=%d y=%d z=%dIn",x,y,z); 程序的运行结果如下: (1)X=2y=3Z=0 (2)X=2y=3Z=0 (3)x=4y=9Z=5 (4)x=2y=3z=0 程序说明:当程序从main函数开始运行时,按定义在内存
y=y*y; printf("(3)x=%d y=%d z=%d\n",x,y,z) ; } 程序的运行结果如下: (1)x=2 y=3 z=0 (2)x=2 y=3 z=0 (3)x=4 y=9 z=5 (4)x=2 y=3 z=0 程序说明:当程序从main函数开始运行时,按定义在内存
中开辟了三个int类型的存储单元x、y、z,且分别赋初值2、 3和0,调用f函数之前的printfi语句输出结果验证了这些值; 当调用函数之后,程序的流程转向f函数,这时系统为函 数的三个形参x、y、Z分配了另外三个临时的存储单元, 同时如图7-1所示,主函数中的x、y、z把值传送给对应的 函数中的x、y、Z,实参和形参虽然同名,但它们却占用 不同的存储单元。 当进入f函数后,首先执行一条printf语句,输出f函数中的x、 y、z的值,因为未对它们进行任何操作,故仍输出2、3、 0; 当执行了赋值语句z=x+y;x=x*x;y=y*y;之
中开辟了三个int类型的存储单元x、y、z,且分别赋初值2、 3和0,调用f函数之前的printf语句输出结果验证了这些值; 当调用f函数之后,程序的流程转向f函数,这时系统为f函 数的三个形参x、y、z分配了另外三个临时的存储单元, 同时如图7-1所示,主函数中的x、y、z把值传送给对应的 f函数中的x、y、z,实参和形参虽然同名,但它们却占用 不同的存储单元。 当进入f函数后,首先执行一条printf语句,输出f函数中的x、 y、z的值,因为未对它们进行任何操作,故仍输出2、3、 0;当执行了赋值语句z=x+y; x=x*x; y=y*y; 之
后,这时Z、x、y存储单元中的值分别为5、4、9, 见图7-2。当退出f函数时,f函数中x、y、Z变量 所占存储单元将消失(释放)。程序返回到 main函数,然后执行main函数中最后一条printf 语句,输出x、y、Z的值。 0 main函数 0 f函数 图7-1实参与形参的存储单元
后,这时z、x、y存储单元中的值分别为5、4、9, 见图7-2。当退出f函数时,f函数中x、y、z变量 所占存储单元将消失(释放)。程序返回到 main函数,然后执行main函数中最后一条printf 语句,输出x、y、z的值。 3 2 3 0 2 0 y y z z x x main函数 f函数 图7-1 实参与形参的存储单元
f函数 图7-2函数中参数的存储单元
x 4 y 9 z 5 f函数 图7-2 f函数中参数的存储单元
7.2.3知识归纳 通过上述程序,我们发现在调用函数时,大多数情况 下主调函数和被调用函数之间有数据传递关系。 1.形式参数和实际参数 函数的参数分为形参和实参两种,作用是实现数据传 送。定义函数时函数名后面括弧中的变量名称为形式参数: 简称形参。在主调函数中调用一个函数时,函数名后面括 弧中的参数(可以是一个表达式)称为实际参数,简称实 参。发生函数调用时,调用函数把实参的值复制一份,传 送给被调用函数的形参,从而实现调用函数向被调用函数 的数据传送
7.2.3 知识归纳 通过上述程序,我们发现在调用函数时,大多数情况 下主调函数和被调用函数之间有数据传递关系。 1.形式参数和实际参数 函数的参数分为形参和实参两种,作用是实现数据传 送。定义函数时函数名后面括弧中的变量名称为形式参数, 简称形参。在主调函数中调用一个函数时,函数名后面括 弧中的参数(可以是一个表达式)称为实际参数,简称实 参。发生函数调用时,调用函数把实参的值复制一份,传 送给被调用函数的形参,从而实现调用函数向被调用函数 的数据传送