用指针来传递数据的一个主要原因是函数可以修改数据。下面的代码段实现了一个交换函数,可以交换其参数所引用的值。这是很多排序算法中的常用操作。我们在这里用整数指针,通过解引它们来实现交换。
void swapWithPointers(int* pnum1, int* pnum2) {
int tmp;
tmp = *pnum1;
*pnum1 = *pnum2;
*pnum2 = tmp;
}
下面的代码段说明了这个函数的用法:
int main() {
int n1 = 5;
int n2 = 10;
swapWithPointers(&n1, &n2);
return 0;
}
指针pnum1
和pnum2
在交换操作中被解引,结果是修改了n1
和n2
的值。图3-3说明了内存如何组织,左图表示swap
函数开始时程序栈的状态,而右图则是函数返回前的状态。