千家信息网

C语言值传递和地址传递的示例分析

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章给大家分享的是有关C语言值传递和地址传递的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一. 值传递我们举一个例子:写一个函数找出两个整数中的最大值。#in
千家信息网最后更新 2026年10月31日C语言值传递和地址传递的示例分析

这篇文章给大家分享的是有关C语言值传递和地址传递的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一. 值传递

我们举一个例子:

写一个函数找出两个整数中的最大值。

#include//get_max函数int get_max(int x,int y){  return (x>y)?x:y;}int main(){  int num1 = 10;  int num2 = 20;  int max = get_max(num1,num2);  printf("max = %d\n",max);  return 0;}

运行结果是:

max = 20

我们来分析一下这个函数调用过程:

num1,num2作为实参传入get_max()函数,形参x,y被实例化(分配内存单元),num1和num2的值按照函数形参表顺序对应地传给了x和y,也就是x=10,y=20,然后函数将x和y中较大的一个的值返回。函数调用完毕,x和y被自动销毁。

我们看一下函数的特征,如果函数的形参和实参一致,这就是值传递。

二.地址传递

再举一个例子:

写一个函数交换两个整形变量的内容。

很多初学者一看觉得太简单了,按照值传递我们来写一遍。

#include //值传递void Swap1(int x, int y) {    int tmp = 0;    tmp = x;     x = y;     y = tmp; }int main(){        int num1 = 1;        int num2 = 2;          printf("交换前::num1 = %d num2 = %d\n",num1,num2);  Swap1(num1, num2);        printf("swap1::num1 = %d num2 = %d\n", num1, num2);        return 0; }

但此时的结果是什么呢?

num1,num2值并没有变啊,并没有交换啊,为什么呢?

因为当实参传给形参的时候,形参是实参的一份临时拷贝,对形参的修改不会影响实参

我们来打印一下各变量的地址

可以看到,实参有自己的地址,形参也有自己的地址,实参只把自己的值传给了形参,地址各有各的,实参的地址上放的值并没有变啊,并且形参在函数调用完后就自动销毁了,也就是说函数内与函数外的变量并没有建立真正的实质的联系。就想象你copy了一个自己的仿生人,他吃了东西,进你的胃了吗?肯定他吃他饱,跟你毫无相关是吧(狗头

那么这个问题怎么解决呢?地址传递

#include //值传递void Swap1(int x, int y) {    int tmp = 0;    tmp = x;     x = y;     y = tmp; }int main(){        int num1 = 1;        int num2 = 2;          printf("交换前::num1 = %d num2 = %d\n",num1,num2);  Swap1(num1, num2);        printf("swap1::num1 = %d num2 = %d\n", num1, num2);        return 0; }

我们来看一下结果

地址传递做了什么?

做地址传递时 函数参数是指针变量,指针变量里面装着的就是地址嘛,所以实参直接就把自己的地址传过去了,px里放的num1地址,py里放的num2地址, *px就是num1本身, *py就是num2本身,实参本身进行了赋值交换,这次不是你的仿生人了,就是你自己体验人生。

我们看一下函数特征:如果传入的实参是形参的指针,那就是地址传递。

其实有一个问题我好久才想明白:

为什么上一个例子(返回两数中较大的一个)没有用地址传递也成功了呢?这两种方式使用的界限是什么呢?

后来这个疑问终于被解答了:

因为第一个例子里num1,num2的值并不需要改变,函数中x,y比较后如果返回x,x的值和a的值是一样的,这个对结果是不影响的,也就是说,这种问题不需要改变实参的值,形参和实参不需要建立那么实质的联系

但要搞清楚的是,函数返回的是num1本身吗?是num1地址上的值吗?不,只是num1的拷贝x地址上的值。

综上,在需要改变实参的值时一定要使用地址传递才行。

感谢各位的阅读!关于"C语言值传递和地址传递的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

地址 函数 形参 就是 变量 例子 结果 分析 也就是 内容 指针 问题 示例 语言 较大 两个 也就是说 仿生 实质 拷贝 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司简介 互联网科技公司起名 科技互联网政务服务 美国互联网科技巨头监管 互联网中国科技 互联网公司 科技公司 科技与互联网发展 浩特互联网科技 互联网金融科技创新 滨湖区互联网智能科技产品供应 阿里互联网科技公司 辽宁互联网新科技 青海科技产业互联网发展 卓翼科技产业互联网合作 中国互联网有什么科技 半导体是互联网高科技吗 南京一网一红互联网科技有限公司 北京天晋互联网科技有限公司 科技互联网专业工作会议发言稿 北京品多多互联网科技有限公司 互联网女皇 腾讯科技 北京三清互联网科技 隆华科技工业互联网 杭州壁岐互联网科技有限公司 互联网科技人工智能实验室 广州新华互联网科技学校电竞方面 互联网科技对化妆品行业 长沙易易互联网科技有限公司 上海互联网科技园景观 高科技和互联网的现代国家
0