在C++编程语言中,函数是代码块,可以接受参数并返回值。这些参数和返回值是函数的核心组成部分。在本章中,我们探讨了关于函数的一些关键知识点,包括形参与实参的区别、函数定义的正确性以及如何编写实用的函数。
1. 形参与实参的区别:
形参(parameter)是在函数定义时声明的变量,它们是函数接口的一部分,定义了函数期望接收的数据类型。形参的作用域仅限于函数内部。而实参(argument)是在函数调用时传递给函数的实际值或表达式,它们在调用者的作用域中存在。实参的值被复制到形参中,这个过程称为参数传递。
2. 错误的函数定义及其修正:
(a) 函数f尝试返回一个字符串,但其声明的返回类型是整型,这是不合法的。修正方法是将返回类型更改为`string`。
```cpp
string f() {
string s;
// ...
return s;
}
```
(b) 函数f2缺少返回类型声明,这是标准C++中不允许的。应添加返回类型,如`int`。
```cpp
int f2(int i) {
/* ... */
}
```
(c) 函数calc中,形参v1重复命名,且缺少函数体的大括号。应更改变量名,并添加大括号。
```cpp
int calc(int v1, int v2) {
/* ... */
}
```
(d) 函数square的定义中,缺少函数体的大括号。应添加大括号。
```cpp
double square(double x) {
return x * x;
}
```
3. 编程练习:
(a) 编写一个名为`power`的函数,它接受两个整数参数,返回第一个参数的第二个参数次幂。然后在主函数`main`中调用此函数,传入两个整数并验证结果。注意考虑溢出问题。
```cpp
#include <iostream>
using namespace std;
int power(int x, int y) {
int result = 1;
for (int loop = 1; loop <= y; ++loop)
result *= x;
return result;
}
int main() {
int xval, yval;
cout << "Enter two integers (the second one should be equal to or bigger than 0): " << endl;
cin >> xval >> yval;
if (yval < 0) {
cout << "The second integer should be equal to or bigger than 0" << endl;
return 1;
}
cout << "Result of raising " << xval << " to the power of " << yval << " is " << power(xval, yval) << endl;
return 0;
}
```
(b) 编写一个函数`abs`,接受一个整数并返回其绝对值。
```cpp
int abs(int x) {
return x > 0 ? x : -x;
}
```
(c) 写一个函数,接受一个整数和一个指向整数的指针,返回两者之间较大的值。函数的返回类型应为`int`,因为无论指针指向的值是多少,结果都是一个整数。
```cpp
int maxOfIntAndPointer(int num, int* ptr) {
return num > *ptr ? num : *ptr;
}
```
通过这些练习,我们可以加深对函数的理解,学习如何正确地定义、调用函数,处理参数传递,以及编写实用的函数来解决特定问题。同时,也要关注潜在的错误,例如类型匹配、作用域和语法问题,这些都是编写有效C++代码的关键。