首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言函数参数是如何传递

前言 我们可能听过C语言传值和传指针,在其他语言中,也有传引用一说,那么他们到底有什么区别呢?如果你还不能准确地分辨,就该好好了解一下了。...传值 我们在初学C语言时候就被老师教过,下面的方式是无法交换a和b: #include void swap(int a,int b) { int temp = a; a = b; b = temp...我们再结合下面的图来理解: 值传递 首先图中方框中上部分a和b代表了main函数中a和b,即原始数据,而方框中下部分a和b代表了函数参数a和b,即原始数据“副本”。...为什么又有传值,又有传指针 看到这里,不知道你是否会疑惑,为什么给函数传递参数时候,一会是传值,一会是传指针呢?为什么传指针就能改变参数值呢?实际上,C语言里,参数传递都是值传递!...c语言1232_副本_副本.jpg 可配合下面的图进行理解: 总结 本文总结如下: 函数形参都是原数据“副本”,因此在函数内无法改变原数据 函数中参数都是传值,传指针本质上也是传值 如果想要改变入参内容

4.1K11
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++参数传递

    C++和Java、C#语言参数传递时候,最大不同就是在 C++ 中,除非显式通过指针或引用传递,否则所有变量都通过值传递。...在 C# 中,除非显式通过具有 ref 或 out 参数修饰符引用传递,否则类通过引用传递,而结构通过值传递。Java中类通过引用传递,基本数据类型通过值传递。...具体说来:C++中每次调用函数时,都会重新创建该函数所有的形参,此时所传递实参将会初始化对应形参。...形参初始化与变量初始化一样:如果形参具有非引用类型,则复制实参值,如果形参为引用类型,则它只是实参别名。 非引用形参表示对实参局部副本。对这类形参修改仅仅改变了局部副本值。...可以发现,不管是基本数据类型,对象,还是指针都是指传递,除非声明了引用,进行引用传递

    82720

    C++函数参数传递

    熟悉C语言程序员常常使用指针类型形参访问函数外部对象,在C++语言中,建议使用引用类型形参替代指针。 2....传递数组形参 数组两个特殊性质对我们定义和使用作用在数组上函数有影响: 不允许拷贝数组:无法以值传递方式使用数组参数 使用数组时会将其转换成指针:当我们为函数传递一个数组时,实际上传递是指向数组首元素指针...C++语言允许将变量定义为数组引用: // 形参是数组引用, 维度是类型一部分 void print(int (&arr)[10]) { for (auto elem : arr) {...标准库类型 如果实参类型不同,可以编写可变参数模板(TODO:p618页介绍) C++还提供了一种特殊形参类型(即省略符),可以用于传递可变数量实参,不过这种功能一般只用于与C函数交互接口程序...省略符形参是为了便于C++程序访问某些特殊C代码而设置,这些代码使用了名为varargsC标准库功能。 4. 可变参数函数模板 可变参数函数模板指的是接收可变数目参数模板函数。

    1.7K20

    go语言:函数参数传递详解

    参数传递是指在程序传递过程中,实际参数就会将参数传递给相应形式参数,然后在函数中实现对数据处理和返回过程。比较常见参数传递有:值传递,按地址传递参数或者按数组传递参数。...1、常规传递 使用普通变量作为函数参数时候,在传递参数时只是对变量值得拷贝,即将实参值复制给变参,当函数对变参进行处理时,并不会影响原来实参值。...2、指针传递 函数变量不仅可以使用普通变量,还可以使用指针变量,使用指针变量作为函数参数时,在进行参数传递时将是一个地址看呗,即将实参内存地址复制给变参,这时对变参修改也将会影响到实参值...4、数组名作为函数参数 和其他语言不同是,go语言在将数组名作为函数参数时候,参数传递即是对数组复制。在形参中对数组元素修改都不会影响到数组元素原来值。...在go语言中,函数也作为一种数据类型,所以函数也可以作为函数参数来使用。

    89210

    C语言中函数参数传递三种方式

    C语言中函数参数传递三种方式 (1)传值,就是把你变量传递给函数形式参数,实际就是用变量值来新生成一个形式参数,因而在函数里对形参改变不会影响到函数外变量值。...在C++中,指针和引用经常用于函数参数传递,然而,指针传递参数和引用传递参数是有本质上不同: 指针传递参数本质上是值传递方式,它所传递是一个地址值。...二、引用参数 1、传递可变参数 传统c中,函数在调用时参数是通过值来传递,这就是说函数参数不具备返回值能力。 所以在传统c中,如果需要函数参数具有返回值能力,往往是通过指针来实现。...二、引用参数 1、传递可变参数 传统c中,函数在调用时参数是通过值来传递,这就是说函数参数不具备返回值能力。 所以在传统c中,如果需要函数参数具有返回值能力,往往是通过指针来实现。...2、给函数传递大型对象 当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象 副本,也就是参数传递时,对象无须复制。

    3.4K10

    Shell 传递参数

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数格式为:$n。...n 代表一个数字,1 为执行脚本第一个参数,2 为执行脚本第二个参数,以此类推…… 实例 以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行文件名(包含文件路径): #!.../test.sh 1 2 3 Shell 传递参数实例! 执行文件名:..../test.sh 第一个参数为:1 第二个参数为:2 第三个参数为:3 另外,还有几个特殊字符用来处理参数参数处理 说明 $# 传递到脚本参数个数 $* 以一个单字符串显示所有向脚本传递参数。.../test.sh 1 2 3 Shell 传递参数实例! 第一个参数为:1 参数个数为:3 传递参数作为一个字符串显示:1 2 3 $* 与 $@ 区别: 相同点:都是引用所有参数

    2.5K20

    go 参数传递

    参考 http://stor.51cto.com/art/201712/559955.htm go 中都是值传递,即使是map、切片这些。 只不过类型分为: 内置类型。...对于引用类型,值传递是标头(header),在函数内操作还是能改变其指向本体。 《Go语言实战》5.3.2 Go 语言引用类型有如下几个:切片、映射、通道、接口和函数类型。...标头值里包含一个指针,因此通过复制来传递一个引用类型副本,本质上就是 在共享底层数据结构。...结构类型 结构类型有两种: 原始 非原始 结构类型可以用来描述一组数据值,这组值本质既可以是原始,也可以是非原始。...这条规则一个例外是,需要让类型值符合某个接口时候,即便类型 本质是非原始本质,也可以选择使用值接收者声明方法。这样做完全符合接口值调用方法 机制。

    2.1K40

    页面参数传递

    url传值与取值过程 url通过跳转页面,给跳转页url问号后拼接参数方法传值 1//问号后userId / dialogId都是要传参数 2//如果有多个参数,就用“&”拼接 3window.location.href...userId=' + userId + "&dialogId=" + dialogId; 在doctor_ask.html页面,把在url中参数取下来,要使用一个方法getQueryString(),...其中有一个方法是用来获取url中含有中文参数: 1// 获取url后某一个query值 2function getQueryString( name ) { 3 var reg =..."" : context; 11} 12 13//获取Url中中文参数方法 14function getQueryUrlString(name) { 15 var reg = new RegExp...= null) { 18 return decodeURI(r[2]); 19 } 20 return "请选择"; 21} 使用方法获取参数: 1//调用方法获取参数,方法中参数名是一个字符串

    3.2K50

    C语言 | 函数参数

    C语言函数参数 C语言函数参数可以是变量、变量指针和变量引用。...scanf("%d %d",&num1,&num2);//此处括号里num1 num2是形式参数 maxNumber(num1,num2); return 0; } C语言数组元素作函数实参...C语言在用数组元素作函数实参时,把实参值传给形参,是“值传递”方式。 数据传递方向是从实参传到形参,单向传递。...C语言数组名作函数参数 除了可以用数组元素作为函数参数外,还可以用数组名作函数参数。 用数组元素作实参时,向形参变量传递是数组元素值,而用数组名作函数实参时,向形参传递是数组首元素地址。...C语言用数组名作函数参数,应该在主调函数和被调函数分别定义数组。 实参数组与形参数组类型应一致,如不一致,结构出错。

    2.7K40

    从Python传递参数C++

    概述 有些场景下,需要将Python里面计算得到参数或者结果传入到C++来进行工程部署。...一个常见问题是,Python该以什么格式 (二进制还是文本) 保存这些参数,然后从C++代码里面来读取呢,各有什么优劣?这里我们简单实验一下,并写一些趁手代码,供查阅。...二进制格式和文本格式对比 假设我们有一组参数是存储在Numpyndarray格式中,为了在C++中使用,我们需要保存它们到硬盘文件中。一般有两种保存方法:二进制文件保存和文本文件保存。...假设我们有一个1024x1024浮点型参数待保存: params = np.random.rand(1024, 1024).astype('float32') 二进制保存很简单,直接调用Numpytofile...+里面方便处理 params = params.flatten() params.tofile("params.bin") C++ 读取二进制文件 C++ 去读二进制代码如下: #include <

    30120

    Shell 传递参数

    概述$n 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数格式为:$n。...n 代表一个数字,1 为执行脚本第一个参数,2 为执行脚本第二个参数,以此类推…… #实例 以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行文件名: #!.../test.sh 1 2 3 Shell 传递参数实例! 执行文件名:./test.sh 第一个参数为:1 第二个参数为:2 第三个参数为:3 另外,还有几个特殊字符用来处理参数: ? #!...; echo "第一个参数为:$1"; echo "参数个数为:$#"; echo "传递参数作为一个字符串显示:$*"; 执行脚本,输出结果如下所示: $ chmod +x test.sh $.../test.sh 1 2 3 Shell 传递参数实例! 第一个参数为:1 参数个数为:3 传递参数作为一个字符串显示:1 2 3 ---- $* 与 $@ 区别: 相同点:都是引用所有参数

    5.3K30

    Shell 传递参数

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数格式为:$n。...n 代表一个数字,1 为执行脚本第一个参数,2 为执行脚本第二个参数,以此类推……实例以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行文件名:#!.../test.sh 1 2 3Shell 传递参数实例!执行文件名:..../test.sh第一个参数为:1第二个参数为:2第三个参数为:3另外,还有几个特殊字符用来处理参数参数处理说明$#传递到脚本参数个数$*以一个单字符串显示所有向脚本传递参数。.../test.sh 1 2 3Shell 传递参数实例!第一个参数为:1参数个数为:3传递参数作为一个字符串显示:1 2 3$* 与 $@ 区别:相同点:都是引用所有参数

    3.3K30

    【Spring】“请求“ 之传递单个参数传递多个参数传递对象

    在发送请求时,可能会带一些参数,所以学习 Spring 请求,主要是学习如何传递参数到后端,以及后端如何接收 传递参数,我们主要是使用浏览器和 Postman 来模拟 后端开发人员无需太过于关注如何传递参数...传递单个参数 接受单个参数,在 Spring MVC 中直接用方法中参数就可以,比如以下代码: import org.springframework.web.bind.annotation.RequestMapping...所以企业开发中,对于参数可能为空数据,建议使用包装类型 3 . 传递参数类型不匹配 http://127.0.0.1:8080/param/m1/int?...传递多个参数 如何接收多个参数呢? 和接收单个参数一样,直接使用方法参数接收即可。...Spring 会根据参数名称自动绑定到对象各个属性上,如果某个属性未传递,则赋值 null(基本类型则赋值为默认初始值,比如 int 类型属性,会被复赋值为 0)

    18510
    领券