首页
学习
活动
专区
工具
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++中每次调用函数时,都会重新创建该函数所有的形参,此时所传递实参将会初始化对应形参。...下面通过实例进行验证: 定义一个Person类 头文件声明 #include using std::string; class Person { private: string name...getGender(); void setGender(string gender); int getAge(); void setAge(int age); void printInfo(); }; 源文件定义

    82720

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

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

    3.4K10

    C++函数参数传递

    熟悉C语言程序员常常使用指针类型形参访问函数外部对象,在C++语言中,建议使用引用类型形参替代指针。 2....C++语言允许将变量定义为数组引用: // 形参是数组引用, 维度是类型一部分 void print(int (&arr)[10]) { for (auto elem : arr) {...void print(int matrix[][10], int rowSize); main函数处理命令行选项 假设我们可执行文件名为prog,我们可以向程序传递如下选项: prog -d -o...标准库类型 如果实参类型不同,可以编写可变参数模板(TODO:p618页介绍) C++还提供了一种特殊形参类型(即省略符),可以用于传递可变数量实参,不过这种功能一般只用于与C函数交互接口程序...省略符形参是为了便于C++程序访问某些特殊C代码而设置,这些代码使用了名为varargsC标准库功能。 4. 可变参数函数模板 可变参数函数模板指的是接收可变数目参数模板函数。

    1.7K20

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

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

    89210

    Go语言 参数传递究竟是值传递还是引用传递

    起初我一直认为,除了以上说五种是引用传递外,其他都是值传递,也就是Go语言中存在值传递与引用传递,但事实真的如所想这样吗?...但是ip也有自己内存地址 0xc042080018。 那么在Go语言传递参数时,我们可能会有以下两种假设: ①函数参数传递都是值传递,也就是传递原值一个副本。...但是可以看出main中各个参数内存地址与函数中接收到内存地址不一致,也就是说指针作为函数参数传递过程中,是传递了该指针副本地址,不是原指针地址。...我们来看一下这个内存分布图 到目前为止,我们验证了非引用类型和指针参数传递都是传递副本,那么对于引用类型参数传递又是如何呢?...因此slice也跟chan与map一样,属于值传递传递是第一个元素指针副本。 总结:在Go语言中只存在值传递(要么是该值副本,要么是指针副本),不存在引用传递

    1.5K20

    从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

    C++抛出异常与传递参数区别

    抛出异常与传递参数区别 从语法上看,C++异常处理机制中,在catch子句中申明参数与在函数里声明参数几乎没有什么差别。例如,定义了一个名为stuff类,那么可以有如下函数申明。...相同点就是传递参数传递异常都可以是传值、传引用或传指针。 (1)区别一:C++标准要求被作为异常抛出对象必须被拷贝复制。考察如下程序。...C++规定对被抛出任何类型异常对象都要进行强制复制拷贝, 为什么这么做,我目前还不明白。 (2)区别二:因为异常对象被抛出时需要拷贝,所以抛出异常运行速度一般会比参数传递要慢。...(3)区别三:参数传递和异常传递类型匹配过程不同,catch子句在类型匹配时比函数调用时类型匹配要求要更加严格。考察如下程序。...---- 参考文献 [1]陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008[P355-P364] [2]c++异常处理机制 [3]C++中理解“传递参数”和异常之间差异

    1.6K20

    C++抛出异常与传递参数区别

    抛出异常与传递参数区别 从语法上看,C++异常处理机制中,在catch子句中申明参数与在函数里声明参数几乎没有什么差别。例如,定义了一个名为stuff类,那么可以有如下函数申明。...相同点就是传递参数传递异常都可以是传值、传引用或传指针。 下面考察二者不同点。 (1)区别一:C++标准要求被作为异常抛出对象必须被拷贝复制。 考察如下程序。...C++规定对被抛出任何类型异常对象都要进行强制复制拷贝, 为什么这么做,我目前还不明白。 (2)区别二:因为异常对象被抛出时需要拷贝,所以抛出异常运行速度一般会比参数传递要慢。...(3)区别三:参数传递和异常传递在类型匹配过程不同,catch字句在类型匹配时比函数调用时类型匹配要求要更加严格。 考察如下程序。...对象作为引用参数传递给函数时,不需要进行额外拷贝; 第二,对象作为异常被抛出与作为参数传递给函数相比,前者允许类型转换比后者要少(前者只有两种类型转换形式); 第三,catch子句进行异常类型匹配顺序是它们在源代码中出现顺序

    1.8K30

    C语言文件操作_C语言调用文件

    文章目录 文件打开与关闭 文件读写操作 读/写文件字符串 格式化读写文件操作 文件定位函数 作业使用案例(自己可以全部完成一遍): 文件打开与关闭 C文件操作用库函数实现,包含在stdio.h中。...读/写文件一个字符 文件I/O与终端I/O关系 案例: 例如:从键盘输入字符,逐个写入文件,直到输入一个“#”为止。...:fread与fwrite 一般调用形式: fread(buffer,size,count,fp ); fwrite(buffer,size,count,fp ); 参数说明: buffer:...size: 每个要读/写数据块大小(字节数) count: 要读/写数据块个数 fp: 要读/写文件指针 返回值: 成功,返count值;出错或文件尾,0值。...C语言规定起始位置有三种,分别为文件开头、当前位置和文件末尾,每个位置都用对应常量来表示: 例如:把位置指针移动到离文件开头100个字节处: fseek(fp, 100, 0);

    9.4K10

    java中参数传递-值传递、引用传递

    public class Example{ String str = new String("good"); char[ ] ch = { 'a' , 'b' , 'c' };...两种类型都是按值传递;没有一种按引用传递。 按值传递和按引用传递。按值传递意味着当将一个参数传递给一个函数时,函数接收是原始值一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。...按引用传递意味着当将一个参数传递给一个函数时,函数接收是原始值内存地址,而不是值副本。因此,如果函数修改了该参数,调用代码中原始值也随之改变。...1、对象是按引用传递 2、Java 应用程序有且仅有的一种参数传递机制,即按值传递 3、按值传递意味着当将一个参数传递给一个函数时,函数接收是原始值一个副本 4、按引用传递意味着当将一个参数传递给一个函数时...这里需要强调是“参数传递机制”,它是与赋值语句时传递机制不同。

    4.7K20

    HarmonyOS 开发实践——跨语言复杂参数类型传递

    场景说明:我们经常在ArkTS与C++之间相互传递参数,那么具体该如何传呢?...注意:C++里字符串结尾是\0,所以转换成字符串时长度为stringSize + 1。核心代码解释Index.ets文件C++层传递string数据。...());    return nullptr;}实现效果场景二:arraybuffer类型传递调用接口:ArkTS传递C++,解析ArrayBuffernapi_get_typedarray_info...类型数据通过传入文件在沙箱中路径来实现 Native C++ 与 ArkTS 之间传递,这里例举了 HEIC 格式图片进行传递,其他格式可以先通过传入文件路径获取 pixelmap,然后使用...首先在 ArkTS 侧将文件路径以字符串方式传给 Native C++ 侧,Native C++ 侧获取传入文件路径,通过 heif_context_read_from_file 从应用沙箱中读取

    3620

    Java参数传递是值传递还是引用传递

    当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象属性,那么这里到底是值传递还是引用传递?    答:是按值传递。Java 语言参数传递只有按值传递。...当一个实例对象作为参数传递到方法中时,参数值就是该对象引用一个副本。指向同一个对象,对象内容可以在被调用方法内改变,但对象引用(不是引用副本) 是永远不会改变。...Java参数传递,不管是基本数据类型还是引用类型参数,都是按值传递,没有按引用传递!  ...我们可以看一下microsoft文档中对按引用传递参数定义(如下截图): 1、基本数据类型参数 先来看一下基本数据类型参数按值传递例子: TransferTest.java public class...当执行到第5行代码时,person作为参数传递给change()方法,需要注意是:person将自己存储单元内容传递给了change()方法p变量!

    3.3K40

    C 语言函数完全指南:创建、调用、参数传递、返回值解析

    C 语言函数 函数是一段代码块,只有在被调用时才会运行。 您可以将数据(称为参数传递给函数。 函数用于执行某些操作,它们对于重用代码很重要:定义一次代码,并多次使用。...C 语言函数参数 参数参数 可以通过参数将信息传递给函数。参数在函数中充当变量。 参数在函数名后,括号内指定。...当调用该函数时,我们会传递一个名字,用于在函数内部打印 “Hello” 和每个人名字。...请注意,当您使用多个参数时,函数调用必须具有与参数数目相同数量参数,并且参数必须按相同顺序传递。...请注意,当您调用函数时,只需在将它作为参数传递时使用数组名称即可 (myFunction(myNumbers))。但是,在函数参数中需要完整数组声明 (int myNumbers[5])。

    39510
    领券