以经典的交换变量函数 swap(a,b) 为例,说明地址传递与值传递的区别。

  1. 值传递:函数的形参变量与实参变量,是两个完全无关的变量,函数在被调用时,创建形参,将实参的值复制过来(替身)。形参本身在函数调用结束后会被销毁(除形参外,static关键字可以使函数内部的变量在调用结束时避免被销毁)。
  2. 除非函数内部有 return 语句将更新后的值再传递出去,否则函数内部进行过的逻辑于外部而言无意义
  3. 地址传递:通过将实参地址传递给函数并在函数内部通过地址调用实参,可以实现对实参的直接控制
  4. 进行地址传递一定要有 *解引用

例一:值传递

#include <stdio.h>void swap(int x, int y);main()
{int a = 10, b = 20;swap(a, b);printf("a=%d\nb=%d\n", a, b);return 0;
}
void swap(int x, int y)
{int t;t = x;x = y;y = t;
}

例二:地址传递

#include <stdio.h>void swap(int *x, int *y);main()
{int a = 10, b = 20;swap(&a, &b);printf("a=%d\nb=%d\n", a, b);return 0;
}
void swap(int *x, int *y)
{int t;t = *x;*x = *y;*y = t;
}

例三:值传递

#include <stdio.h>void swap(int *x, int *y);main()
{int a = 10, b = 20;int *pp = &a;int *kk = &b;swap(pp, kk);printf("a=%d\nb=%d\n", *pp, *kk);return 0;
}
void swap(int *x, int *y)
{int *t;t = x;x = y;y = t;
}

参考

C语言参数传递

C语言参数传递——地址传递与值传递相关推荐

  1. C语言中函数参数传递的方式:值传递,地址传递

    ** C语言中函数参数传递的方式:值传递,地址传递 ** 值传递:将实参的值复制至形参的相应存储单元中,实参与形参占用不同存储单元,单向传递 地址传递:使用数组名或者指针作为函数参数,传递的是该数组的 ...

  2. Java中的参数传递,到底是值传递还是引用传递?

    文章内容为转载,转载自公众号Hollis关于我要彻底给你讲清楚,Java就是值传递,不接受争辩的那种! 原文链接:我要彻底给你讲清楚,Java就是值传递,不接受争辩的那种! 知乎回答链接:Java 到 ...

  3. go slice获取唯一值_Go语言引用传递与值传递

    先说结论 GO中只有值传递,没有引用传递 所谓值传递,就是实参通过拷贝将自身内容传递给形参.也就是将传递的内容拷贝一份,给函数.所以函数外和函数里对这个参数地址求值,应该是不一样的. 证明如下: fu ...

  4. 创建链表小细节(引用传递和值传递以及链表中的LinkList L、LinkList *L、LinkList L)

    函数参数传递的两种方式为值传递和引用传递 目录 函数参数传递的两种方式为值传递和引用传递 1.传值方式传参 2.引用方式传参 3.通过一段代码运行进一步理解传指针(包括二级指针)和传指针的引用 4.总 ...

  5. PHP 怎样理解go指针,golang指针传递和值传递的区别是什么?

    Go允许通过指针(有时称为引用)和值来传递参数.在这篇文章中,我们将比较两种方法,特别注意可能影响选择的不同情境. 指针传递与值传递 严格地说,go方法或函数只有一种传递方式,那就是值传递.每次将一个 ...

  6. C#中方法参数的引用传递、值传递。

    一.值类型和引用类型 C# 中的类型一共分为两类,一类是值类型(Value Type),一类是引用类型(Reference Type). 值类型包括结构体(struct)和枚举(enum). 引用类型 ...

  7. python引用传递和值传递的区别_Python 值传递和引用传递

    值传递和引用传递 python的值传递不会改变传入参数的值,而引用传递传入的是一个地址,有点类似c的指针,在执行完成之后会改变传入地址所指的值. 值传递类型如下: 上面的代码只是将a的值作为参数传递进 ...

  8. java中是引用传递还是值传递....

    刚才与Z师兄聊天,他提问: 你说java中是引用传递还是值传递啊? 当时俺搞混了这个"传递"的意思, 本来以为是对象的实例化比如: abc a=new abc(); 这个a 是引用 ...

  9. java还值_Java到底是引用传递还是值传递

    前言 前段时间在群里看到类似这样一个问题,下面的代码会输出什么呢? public void test(){ String str = "hello"; change(str); S ...

最新文章

  1. rust8G内存够不够用_多线程?怎么用?
  2. SVN-项目 XXX 受源代码管理。向源代码管理注册此项目时出错。建议不要对此项目进行任何修改...
  3. linux命令行模式连接网络,centos命令行模式连接无线网络的过程
  4. Python字符串转数字
  5. mysql数据库表迁移
  6. IOS之学习笔记十四(协议的定义和实现)
  7. DOM BOM document window 区别
  8. 你见过出道即巅峰吗?
  9. python3.5 连接mysql_python3.5 連接mysql本地數據庫
  10. spring boot——MockMvc的用法
  11. 矩池云上如何安装tensorRT
  12. springboot thymeleaf配置_【程序源代码】Spring Boot 开发笔记web开发实战1
  13. 推荐系统入门实践:世纪佳缘会员推荐
  14. 小学生学计算机编程实例,用日常生活小例子来教孩子学编程
  15. 计算机病毒及解决方法,3种电脑病毒及解决方法
  16. 北京地铁21号线_燕郊地铁M23号线是什么鬼?
  17. 工业级手持式扫描仪3d扫描首选迪万科技抄数服务
  18. 关于微信开放平台授权事件接收Url的配置以及参数接收
  19. 多邻国学英语 tips
  20. gltf 2.0快速入门

热门文章

  1. 跟我学Spring3-开涛-笔记
  2. Windows 微博图床工具(支持多种图床)下载和picgo VSCode插件版的详细介绍
  3. PHP制作简单图床,利用微博当图床-php语言实现
  4. 增加PRODUCT_BOOT_JARS及类
  5. html里如何定位背景图片,Html+Css CSS中背景图片定位方法
  6. wpsa4排版_WPS如何快速排版
  7. Mac - was compiled with optimization - stepping may behave oddly; variables may not be available.
  8. Android 9.0系统软件进入视频界面发生闪退
  9. laravel 输出最后执行sql 附:whereIn用法
  10. 移动端APP测试总结