C语言指针交换示例:实参与形参的两种调用方式

需积分: 0 4 下载量 80 浏览量 更新于2024-08-05 收藏 1008KB PDF 举报
在C语言程序设计中,第8章重点探讨了指针的应用,特别是指针作为函数参数的使用。这一章节提供了一个典型的实例,即如何实现两数互换,通过两种不同的方法来展示实参和形参的关系。 **程序1:基本类型变量作函数参数** 在这个示例中,`Swap` 函数接受两个整型变量`x`和`y`作为输入(`int x, int y`)。在`main`函数中,实参`a=5`和`b=9`被传递给`Swap`函数,但因为是按值传递(Call by value),函数内部的`x`和`y`是对实参的副本进行操作,不会直接影响实参的值。函数执行后,输出结果仍然是`a=5`和`b=9`。 ```c void Swap(int x, int y) { int temp; temp = x; x = y; y = temp; } int main() { int a = 5; int b = 9; Swap(a, b); printf("a=%d, b=%d", a, b); return 0; } ``` **程序2:指针类型变量作函数参数** 当使用指针作为函数参数时(`void Swap(int* x, int* y)`),情况有所不同。实参`&a`和`&b`传递的是它们的地址,即`x`和`y`实际上是存储数值的内存地址。这种情况下,函数内部对`*x`和`*y`的修改会影响到实参,因为它们是原始数据的引用。所以,调用`Swap(&a, &b)`后,输出变为`a=9`和`b=5`,实现了两数的交换。 ```c void Swap(int* x, int* y) { int temp; temp = *x; *x = *y; *y = temp; } int main() { int a = 5; int b = 9; Swap(&a, &b); printf("a=%d, b=%d", a, b); return 0; } ``` 在这个例子中,C语言中的“模拟”了call by reference的效果,即函数能够直接操作实际的变量而不是其副本,从而实现更高效且直接的值传递。 值得注意的是,虽然C语言的传递方式在函数内部表现为call by reference,但编译器在检查时通常会检查实参和形参的数据类型是否匹配,如果不匹配,可能会产生警告。因此,在使用指针作为参数时,确保传递的指针确实指向正确的类型至关重要。