指针与函数:参数传递和数组操作

需积分: 10 0 下载量 91 浏览量 更新于2024-07-15 收藏 621KB PDF 举报
"第四节 指针与函数(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`是最大的。 通过深入理解指针作为函数参数的机制,开发者能够编写出更加灵活和强大的代码,实现对数据的直接操作和修改,而不局限于简单的值传递。这种能力在处理数组、动态内存分配以及复杂数据结构时尤其重要。