正在加载图片...
第6单元指针 113 变量。因此,事情很明显,在函数swap()执行完毕以后,其参变量ⅹ和y的值确实已被交 换,如图6-2所示 然而,事情到此为止D:1002 了。从图62中可以看出,DS:1001 主函数中定义的变量x 虽然swap()函数的两个 DS:1002 主函数中定义的变量y 参数变量x和y的值已被交 函数swap0的参数变量x 换,但原来主函数的变量xDS:1005 和y的值却没有发生变化 DS:1002 函数 swapo的参数变量y 而且,随着函数swap()运DS:1008 行结束返回主函数后, swap DS:1092 函数 swapo中定义的局部变量tmp ()中为局部工作变量申请 的内存空间,包括其参数图6-2函数sWap()中的运算结束时的内存分配示意图 x、y和局部变量tmp占用 的内存单元,都将被释放。函数swap()所做的一切工作都付之东流了 那么,怎样才能编写一个真正可以交换参数值的swap()函数呢?这就要用到指针了 下面将函数swap()的参数声明为指向int类型的指针,重新编写该函数 程序 ∥/ Example6-1:函数 swapo:交换两个整形变量的值 void swap (int *xp int *yp) int tmp *xp * yp *kyp tmp: DS:1000 注意到这次函数DS:1001 主函数中定义的变量x DS:1002 swap()的参数变量xpDs:1003 主函数中定义的变量y 和yp是两个指向整型变m:041100 函数swap0的参数变量xp 量的指针,因此在调用该DS:1005 函数时只能使用变量的地s:10071002函数swap0的参数变量yp DS:1006 址作为实参。使用下列语DS:1008 函数 swap o中定义的局部变量tmp 句取代测试主函数中的函DS:1009 数调用语句 图6-3函数 swapo中的运算结束时的内存分配示意图 swap(&x, &y) 此时的内存分配如图6-3所示 于是,在新的swap()函数中,语句第 6 单元 指针 - 113 - 变量。因此, 事情很明显, 在函数 swap()执行完毕以后, 其参变量 x 和 y 的值确实已被交 换, 如图 6-2 所示。 然而, 事情到此为止 了。从图 6-2 中可以看出, 虽然 swap()函数的两个 参数变量x和y的值已被交 换, 但原来主函数的变量 x 和 y 的值却没有发生变化。 而且, 随着函数 swap()运 行结束返回主函数后, swap ()中为局部工作变量申请 的内存空间, 包括其参数 x、y 和局部变量 tmp 占用 的内存单元,都将被释放。函数 swap()所做的一切工作都付之东流了。 那么, 怎样才能编写一个真正可以交换参数值的 swap()函数呢? 这就要用到指针了。 下面将函数 swap()的参数声明为指向 int 类型的指针, 重新编写该函数: 程 序: // Example 6-1:函数 swap(): 交换两个整形变量的值 void swap(int *xp,int *yp) { int tmp; tmp = *xp; *xp = *yp; *yp = tmp; } 注意到这次函数 swap()的参数变量 xp 和 yp 是两个指向整型变 量的指针, 因此在调用该 函数时只能使用变量的地 址作为实参。使用下列语 句取代测试主函数中的函 数调用语句: swap(&x,&y); 此时的内存分配如图 6-3 所示。 于是, 在新的 swap()函数中, 语句 tmp = *xp; DS:1000 DS:1001 DS:1002 DS:1003 DS:1004 DS:1005 DS:1006 DS:1007 DS:1008 DS:1009 主函数中定义的变量x 主函数中定义的变量y 函数swap()的参数变量x 函数swap()的参数变量y 函数swap()中定义的局部变量tmp 2 3 3 2 2 图6-2 函数swap()中的运算结束时的内存分配示意图 DS:1000 DS:1001 DS:1002 DS:1003 DS:1004 DS:1005 DS:1006 DS:1007 DS:1008 DS:1009 主函数中定义的变量x 主函数中定义的变量y 函数swap()的参数变量xp 函数swap()的参数变量yp 函数swap()中定义的局部变量tmp 2 3 1000 1002 2 图6-3 函数swap()中的运算结束时的内存分配示意图
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有