<C语言>函数的值传递与地址传递--以输入三个数并从小到大排列为例
2017-08-09 14:27
405 查看
一、值传递
可见并没有实现排序,实际上是我们定义的sort()函数里面并没有发生值得交换。
该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。
但是,如果我们将printf("从小到大排列:%d %d %d\n", x, y, z);这一句放到sort()函数的末尾,代码如下:
这时候实现了排序。我的理解是:
由于sort()函数我们定义的是void型,并没有返回值,所以在主函数中调用是调不出结果来的,若把打印语句放到函数中去,是能执行到那一步的。
那么,我们来看看地址传递的情况,代码如下:
再来看看结果:
与第一段代码相比较,这种采用地址传递的方式是能够排列的。这是因为地址拿去交换了,而不是值。
通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。
#include <stdio.h> //自定义函数实现三个数从小到大排列 //值传递 //编者:wsg void sort(int a, int b, int c) { int t; if(a>b) { t = a; a = b; b = t; } if(a>c) { t = a; a = c; c = t; } if(b>c) { t = b; b = c; c = t; } } int main() { int x, y, z; printf("请输入三个数:\n"); scanf("%d %d %d", &x, &y, &z); sort(x, y, z); printf("从小到大排列:%d %d %d\n", x, y, z); return 0; }我们来看一下结果:
可见并没有实现排序,实际上是我们定义的sort()函数里面并没有发生值得交换。
该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。
但是,如果我们将printf("从小到大排列:%d %d %d\n", x, y, z);这一句放到sort()函数的末尾,代码如下:
#include <stdio.h> //自定义函数实现三个数从小到大排列 //编者:wsg void sort(int a, int b, int c) { int t; if(a>b) { t = a; a = b; b = t; } if(a>c) { t = a; a = c; c = t; } if(b>c) { t = b; b = c; c = t; } printf("从小到大排列:%d %d %d\n", a, b, c); } int main() { int x, y, z; printf("请输入三个数:\n"); scanf("%d %d %d", &x, &y, &z); sort(x, y, z); return 0; }我们再来看一下结果:
这时候实现了排序。我的理解是:
由于sort()函数我们定义的是void型,并没有返回值,所以在主函数中调用是调不出结果来的,若把打印语句放到函数中去,是能执行到那一步的。
那么,我们来看看地址传递的情况,代码如下:
#include <stdio.h> //自定义函数实现三个数从小到大排列 //编者:wsg void sort(int *a, int *b, int *c) { int t; if(*a>*b) //条件判断要解引用a和b的地址 { t = *a; *a = *b; *b = t; } if(*a>*c) { t = *a; * 4000 a = *c; *c = t; } if(*b>*c) { t = *b; *b = *c; *c = t; } //printf("从小到大排列:%d %d %d\n", *a, *b, *c); } int main() { int x, y, z; printf("请输入三个数:\n"); scanf("%d %d %d", &x, &y, &z); sort(&x, &y, &z); printf("从小到大排列:%d %d %d\n", x, y, z); return 0; }
再来看看结果:
与第一段代码相比较,这种采用地址传递的方式是能够排列的。这是因为地址拿去交换了,而不是值。
通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。
相关文章推荐
- <C语言>实现输入几个数,先倒叙排列,再用“冒泡排序”方法从小到大排列
- 【传地址值】第17周项目1--体会函数参数传递(输入三个整数将其按从大到小顺序输出)
- <C语言>结构体里包含共用体实例--输入输出数据
- <Python进阶读书笔记>之(一) 函数不定参数传递
- 任意输入三个数,输出从小到大排列
- 【原】输入三个数字,从小到大排列显示的实现
- <寒江独钓>学习笔记 -- 第四章 Hook分发函数 过滤键盘输入
- C语言----关于值传递和地址传递
- 10月5日 c语言简单数组 输入10个数 要求从小到大顺序排列
- <详解>C语言实现程序跳转到绝对地址0x100000处执行
- <C语言>如何一步一步根据简单的代码联想到更多的功能?(实现输入一个整数,输出比它小包括它本身的所有素数。)
- 【引用类型做参数】第17周项目1--体会函数参数传递(输入三个整数,将其按从大到小的顺序输出)
- c语言输入与输出库函数#include<stdio.h>
- <Python>Problem#1 Python的函数参数传递
- C语言:将n个数输入时的顺序逆序排列,用函数实现。
- C语言—— 将N个数按输入时顺序的逆序排列,用函数实现
- <C语言>实现简单的计算器(循环输入,加减乘除法可选)
- C语言:输入10个人的英文(拼音也行)名字,名字按字母顺序从小到大排列.
- <C语言>函数作实参传递给另一函数
- 【c语言】有一函数:x < 0 ,y = -1;x = 0,y = 0;x > 0,y = 1,编程输入一个x值,要求输出对应的y