C语言指针交换示例:实参与形参的两种调用方式
需积分: 0 114 浏览量
更新于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,但编译器在检查时通常会检查实参和形参的数据类型是否匹配,如果不匹配,可能会产生警告。因此,在使用指针作为参数时,确保传递的指针确实指向正确的类型至关重要。
2022-08-03 上传
2021-12-23 上传
2023-10-23 上传
2023-10-23 上传
2021-07-14 上传
2022-01-13 上传
2023-11-06 上传
2023-10-23 上传
2020-07-15 上传
无声远望
- 粉丝: 1127
- 资源: 298
最新资源
- MyEclipse6 JavaEEDev_PDF
- oracle的入门心得
- WebService传递POJO和对象数组的例子
- 租用游艇问题 长江游艇俱乐部在长江上设置了n 个游艇出租站1,2,…,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i 到游艇出租站j 之间的租金为r(i,j),1≤i<j≤n。试设计一个算法,计算出从游艇出租站1 到游艇出租站n 所需的最少租金。
- 示波器基础知识,学习
- c c++算法大全(数据结构)
- Mac os的快捷键
- 最优装载 有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。
- SIP呼叫流程典型流程图解及其详细解释
- Verilog HDL 入门教程
- EXT 中文手册.pdf
- CMMI软件-必备测试
- ASP转html静态页面后点击计数解决方法和用户登录状态的解决方法
- 模式识别的研究进展分析
- 几种嵌入式文件系统的对比
- eclipse中文教程