②表达式调用方式:断点为函数调用所在的表达 式。 例如,在[案例7.1]中,“printf.,max(numl, num2));语句中的表达式调用“max(numl,num2)”: 其断点为该表达式调用所在的表达式“max(numl, num2)”(在本例中,“max(numl,num2)”函数调用既是表达式 调用,本身又构成一个简单表达式)。 2024/10/28 16
2024/10/28 16 ② 表达式调用方式:断点为函数调用所在的表达 式。 例如,在[案例7.1]中,“printf(., max(num1, num2) );”语句中的表达式调用“max(num1, num2)” : 其断点为该表达式调用所在的表达式“max(num1, num2)”(在本例中,“max(num1, num2)”函数调用既是表达式 调用,本身又构成一个简单表达式)
7.1.3参数传递 发生函数调用时,根据参数值的性质不同,将参 数传递分为两种: (1)值传递— 参数值是一个一般数据(整形、实型、 字符型数据等)。 系统把实参值复制1份给形参;被调用函数结束 时,形参值不能传回给实参。 (2)地址(引用)传递一参数值是一个地址。 2024/10/28 17
2024/10/28 17 7.1.3 参数传递 发生函数调用时,根据参数值的性质不同,将参 数传递分为两种: (1) 值传递——参数值是一个一般数据(整形、实型、 字符型数据等)。 系统把实参值复制1份给形参;被调用函数结束 时,形参值不能传回给实参。 (2) 地址(引用)传递——参数值是一个地址
执行[案例7.1时的参数传递: int max(int nl,int n2) return n>n2n1 n2); main() int max(int N,intn2); int numl,num2 printf("input two numbers:") scanf("%d%d",&numl,&num2), printf("max=%d\n",max(numl,num2)); 2024/10/28 18
2024/10/28 18 执行[案例7.1]时的参数传递: int max( int n1, int n2) { return ( n1 > n2 ? n1 : n2); } main( ) { int max(int n1, int n2); int num1,num2; printf("input two numbers: "); scanf("%d%d", &num1, &num2); printf("max=%d\n", max(num1, num2)); }
(1)形参变量只有在被调用时,才分配内存单元; 调用结束时,立即被释放。 因此,形参只有在该函数内有效。调用结束,返 回调用函数后,则不能再使用该形参变量。 (2)实参和形参占用不同的内存单元,即使同名也 互不影响。 2024/10/28 19
2024/10/28 19 (1)形参变量只有在被调用时,才分配内存单元; 调用结束时,立即被释放。 因此,形参只有在该函数内有效。调用结束,返 回调用函数后,则不能再使用该形参变量。 (2)实参和形参占用不同的内存单元,即使同名也 互不影响
7.1.4小结 1.函数定义不允许嵌套。 2.调用有参函数时,实参的个数和类型,必须 与形参匹配。 3.函数调用的两种方式与断点位置 (1)语句方式:断点为函数调用语句的下一条语 句。 (2)表达式方式:断点为函数调用所在的表达式。 2024/10/28 20
2024/10/28 20 7.1.4 小结 1.函数定义不允许嵌套。 2.调用有参函数时,实参的个数和类型,必须 与形参匹配。 3 .函数调用的两种方式与断点位置 (1) 语句方式:断点为函数调用语句的下一条语 句。 (2) 表达式方式:断点为函数调用所在的表达式