函数通常的形式如下:
1. returnType functionName( arg1Type arg1, ..., argNType argN )
2. {
3. statements
4. }
一个简单函数示例如下:
1. float salesTax( float purchasePrice, float taxRate )
2. {
3. float tax = purchasePrice * taxRate;
4. return tax;
5. }
可以这样来调用一个函数:先写函数名,后面跟着一个括号括起来的表达式列表,其中每个表达式对应函数的一个参数。每个表达式类型必须与声明中的函数参数的类型一一对应。如下的示例展示了一个简单的函数调用:
1. float carPrice = 20000.00;
2. float stateTaxRate = 0.05;
3.
4.
5. float carSalesTax = salesTax( carPrice, stateTaxRate );
当执行函数调用的那行代码时,控制跳转到函数体中的第一条语句。执行继续进行,直到遇到一条return 语句,或者到达函数的末尾。执行随后返回到调用环境中。在调用环境中,函数表达式的值就是return 语句所设置的值。
注意 函数并非必须有参数或返回一个值。没有返回值的函数,其类型为void:
1. void FunctionThatReturnsNothing( int arg1 )
在不返回值的函数中,可以省略return 语句。通过对参数列表使用空的圆括号,来表示不接受任何参数的函数:
1. int FunctionWithNoArguments()
函数有时候仅仅为了其副作用而执行。下面这个函数打印出了销售税,但是,它对程序的状态没有做出任何修改:
1. void printSalesTax ( float purchasePrice, float taxRate )
2. {
3. float tax = purchasePrice * taxRate;
4. printf( "The sales tax is: %f.2\n", tax );
5.
6. }
C 函数根据值来调用。当调用一个函数时,计算调用语句的参数列表中的表达式,并且将它们的值传递给函数。函数不能直接修改调用环境中的任何变量的值。下面这个函数对于调用环境中的任何内容没有影响:
1. void salesTax( float purchasePrice, float taxRate, float carSalesTax
)
2. {
3. // Changes the local variable calculateTax but not the value of
4. // the variable in the calling context
5.
6. carSalesTax = purchasePrice * taxRate;
7. return;
8. }
要改变调用环境中的变量的值,必须传入一个指向该变量的指针,并且,使用指针来操作该变量的值:
1. void salesTax( float purchasePrice, float taxRate,
float *carSalesTax)
2. {
3. *carSalesTax = purchasePrice * taxRate; // this will work
4.
5. return;
6. }
注意 前面的例子仍然是按照值来调用的。将调用环境中的一个变量的指针的值,传递给了该函数。然后,该函数使用这个指针(它没有修改)来设置它所指向的变量的值。
声明函数
当调用一个函数时,编译器需要知道函数的参数和返回值的类型。它使用这一信息来建立函数与其调用者之间的通信。如果函数的代码出现在函数调用之前(在源代码文件中),那么你不必做任何其他的事情。如果函数代码在函数调用的后面,或者位于另一个文件中,则在使用函数之前必须先声明它。
函数声明重复了函数的第一行,而且在末尾添加了一个分号:
1. void printSalesTax ( float purchasePrice, float taxRate );
1. returnType functionName( arg1Type arg1, ..., argNType argN )
2. {
3. statements
4. }
一个简单函数示例如下:
1. float salesTax( float purchasePrice, float taxRate )
2. {
3. float tax = purchasePrice * taxRate;
4. return tax;
5. }
可以这样来调用一个函数:先写函数名,后面跟着一个括号括起来的表达式列表,其中每个表达式对应函数的一个参数。每个表达式类型必须与声明中的函数参数的类型一一对应。如下的示例展示了一个简单的函数调用:
1. float carPrice = 20000.00;
2. float stateTaxRate = 0.05;
3.
4.
5. float carSalesTax = salesTax( carPrice, stateTaxRate );
当执行函数调用的那行代码时,控制跳转到函数体中的第一条语句。执行继续进行,直到遇到一条return 语句,或者到达函数的末尾。执行随后返回到调用环境中。在调用环境中,函数表达式的值就是return 语句所设置的值。
注意 函数并非必须有参数或返回一个值。没有返回值的函数,其类型为void:
1. void FunctionThatReturnsNothing( int arg1 )
在不返回值的函数中,可以省略return 语句。通过对参数列表使用空的圆括号,来表示不接受任何参数的函数:
1. int FunctionWithNoArguments()
函数有时候仅仅为了其副作用而执行。下面这个函数打印出了销售税,但是,它对程序的状态没有做出任何修改:
1. void printSalesTax ( float purchasePrice, float taxRate )
2. {
3. float tax = purchasePrice * taxRate;
4. printf( "The sales tax is: %f.2\n", tax );
5.
6. }
C 函数根据值来调用。当调用一个函数时,计算调用语句的参数列表中的表达式,并且将它们的值传递给函数。函数不能直接修改调用环境中的任何变量的值。下面这个函数对于调用环境中的任何内容没有影响:
1. void salesTax( float purchasePrice, float taxRate, float carSalesTax
)
2. {
3. // Changes the local variable calculateTax but not the value of
4. // the variable in the calling context
5.
6. carSalesTax = purchasePrice * taxRate;
7. return;
8. }
要改变调用环境中的变量的值,必须传入一个指向该变量的指针,并且,使用指针来操作该变量的值:
1. void salesTax( float purchasePrice, float taxRate,
float *carSalesTax)
2. {
3. *carSalesTax = purchasePrice * taxRate; // this will work
4.
5. return;
6. }
注意 前面的例子仍然是按照值来调用的。将调用环境中的一个变量的指针的值,传递给了该函数。然后,该函数使用这个指针(它没有修改)来设置它所指向的变量的值。
声明函数
当调用一个函数时,编译器需要知道函数的参数和返回值的类型。它使用这一信息来建立函数与其调用者之间的通信。如果函数的代码出现在函数调用之前(在源代码文件中),那么你不必做任何其他的事情。如果函数代码在函数调用的后面,或者位于另一个文件中,则在使用函数之前必须先声明它。
函数声明重复了函数的第一行,而且在末尾添加了一个分号:
1. void printSalesTax ( float purchasePrice, float taxRate );
常用的做法是将函数声明放入到一个头文件中。然后,将头文件包含到使用该函数的任何文件中。