"第四节 指针与函数(2020.08.08)
本节主要探讨了指针在函数中的应用,特别是如何使用指针作为函数参数来实现对变量的直接操作和修改。
一、指针作为函数参数
在C++中,指针可以被用作函数参数,这允许函数直接访问并修改实参变量的值。通过传递指针,函数能够改变外部变量的状态,而不仅仅是处理传入的数据副本。例如,`swap()`函数接受两个整型指针,通过它们交换所指向的变量的值:
```cpp
void swap(int* x, int* y) {
int t = *x;
*x = *y;
*y = t;
}
```
在其他函数中调用`swap(&a, &b)`会使得变量`a`和`b`的值互换。这里,`&`运算符用于获取变量的地址,将它们作为指针传递给`swap()`。
二、指针与非指针参数的区别
对比之下,如果直接将变量作为函数参数,如`void swap(int x, int y)`,函数内部的任何改变都只影响局部变量,不会影响到原始的变量。这是因为函数参数实际上是实参的副本,而不是引用。
三、`scanf()`与指针
类似地,当使用`scanf()`函数读取变量时,需要传递变量的地址,即`&`运算符后的变量。这是因为`scanf()`通过指针来修改原始变量的值,而不是创建一个新的变量。
四、指针与函数的实际应用
作为练习,可以编写一个函数,接收三个整型指针,对它们所指向的值进行排序,并将最小值、次小值和最大值分别赋给第一个、第二个和第三个变量。这里可以使用选择排序或者更高效的排序算法来实现这一功能:
```cpp
void sortThree(int* a, int* b, int* c) {
if (*a > *b) swap(a, b);
if (*b > *c) swap(b, c);
if (*a > *b) swap(a, b);
}
```
这个`sortThree()`函数首先比较`a`和`b`,然后比较`b`和`c`,再比较`a`和`b`一次,确保`a`始终是最小的,`b`是次小的,然后`c`是最大的。
通过深入理解指针作为函数参数的机制,开发者能够编写出更加灵活和强大的代码,实现对数据的直接操作和修改,而不局限于简单的值传递。这种能力在处理数组、动态内存分配以及复杂数据结构时尤其重要。