C语言的参数传递

Windows 镜像包大全(附百度云下载链接) 插入U盘,找到下载好的两个驱动软件,并安装,先打开驱动人生万能网卡版,安装好网卡驱动,可以接入wifi或者网线了,然后打开驱动精灵,按照提示,安装所有的驱动(中间要是让你重启,就先选择稍后再说,如果有的驱动安装好之后非要你重启,关不掉的那种,那你就重启吧),等全部安装好了,重启电脑。如果你有显卡,这里以英伟达举例,我是GTX960的,当你的驱动都安装好后,右键桌面,会出现一个英伟达控制面板。安装软碟通,下载之后,一直下一步就ok,啥也不用配置,到了最后一项点击“继续试用”即可。(下载里面的网卡版即可), 阅读详情
一直没有好好研究C语言参数传递,只是从书上看,知道有传值和传地址两种方式,但调用函数时,他们内部发生什么变化并不清楚,现在写下来。
C语言的参数传递有传值和传地址两种方式。
传值的过程:
(1)行参与实参各占一个独立的存储空间。
(2)行参的存储空间是函数被调用时才分配的。调用开始,系统为行参开辟一个临时
存储区,然后将各实参之值传递给行参,这时行参就得到了实参的值。
(3)函数返回时,临时存储区也被撤销。
传值的特点:单向传递,即函数中对行参变量的操作不会影响到调用函数中的实参变量。
例如:
#include <stdio.h>

void change_by_value(int x){
    x=x+10;
}
void change_by_address(int *x){
    *x=*x+10;
}
void main(){
    int a=3;
    printf("a=%d/n",a);
    change_by_value(a);
    printf("a=%d/n",a);//a的值并没有改变
    change_by_address(&a);
    printf("a=%d/n",a);//
}
运行结果:
3
3
13
传值方式:
void change_by_value(int x)内部发生的动作应当是当函数被调用时(堆栈调用)
在堆栈上临时分配了一块区域,调用结束,出栈。
void change_by_value(int x){
    int _x=x;//拷贝一份传递给临时变量_x
    _x=_x+10;//改变的是_x,不是x
}
地址传递方式:参数是地址
void change_by_address(int *x){
    *x=*x+10;
}
实参和行参共享一个存储单元,对行参的操作相应的就改变了实参,此时参数传递是双向的。
此外,参数的存储位置和变量的存储属性对参数传递也有影响,变量的存储属性有动态变量、静态变量
外部变量,动态变量有2种,自动(auto)和寄存器(register)变量。

存储属性

register

auto

static

extern

存储位置

寄存器

主存

生存期

动态生存期

永久生存期

作用域

局部

局部或全局

全局


此外还应注意内存的分配方式,内存分配方式有三种:
(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的
整个运行期间都存在。例如全局变量,static 变量。
(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函
数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集
中,效率很高,但是分配的内存容量有限。
(3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意
多少的内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存
期由我们决定,使用非常灵活,但问题也最多。
第一章:基础知识 - 概念与基础,理解什么是功耗 电源管理与功耗调优:实战项目经验分享 阅读详情

相关推荐

手把手配置:用Synopsys VDK为英飞凌TC4x系列MCU做虚拟原型开发

本文详细介绍了如何使用Synopsys VDK为英飞凌TC4x系列MCU进行虚拟原型开发,涵盖开发环境搭建、关键外设虚拟化配置、AUTOSAR栈集成及虚拟调试与性能调优全流程。通过虚拟原型技术,开发者可提前6-12个月启动软件开发,显著提升汽车电子项目的开发效率。

weixin_30606461的博客 291

C语言函数参数传递详解

1.值传递和指针传递 (1)值传递:即按值传递参数,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变 ...

qq_42181592的博客 8685

三种1:4传输线变压器巴伦的分析

满足多模多馈天线系统匹配要求的传输线变压器巴仑有:双线传输线变压器( 见图1) 、三线传输线变压器( 见图4) 和四线传输线变压器( 见图5) 。尽管3 者的结构不同, 但都可实现1∶4 阻抗变换和不平衡-平衡转换。下面就应用电报方程对它们的阻抗变换特性和输出平衡特性进行分析。

weixin_42407808的博客 8047

C语言中的参数传递

参数传递有两种方式: 1,值传递(参数为整型、字符型等) 2,传地址 (1)参数为指针变量 (2)参数为引用类型 (3)参数为数组名 一、传值方式 函数调用时为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元释放,实参单元仍保留并维持原值。 #include <stdio.h> #include <stdlib.h> swap(int a,int b) { int temp; temp=a; a=b; b=temp; } i

qq_57867712的博客 3236

机器学习入门基础 | 基于python的高光谱图像特征挖掘:PCA + 形态学属性处理可视化实战

本文介绍了一种基于PCA和形态学操作的高光谱图像特征提取方法。通过主成分分析降低数据维度,再运用面积开闭操作增强空间结构特征,有效去除噪声并填补孔洞。实验采用WHU-HI-HanChuan数据集,提供完整的Python实现代码,包括数据加载、PCA降维、形态学处理及结果可视化等步骤。该方法能够显著改善图像质量,为后续分类和变化检测任务提供更好的特征输入。实验结果表明,不同阈值的形态学处理能呈现不同程度的空间结构增强效果,对区域生长、分割和聚类等应用具有重要价值。

lestatlu的博客 1046

带你学习Android中的ContentObserver

通过使用,开发者可以有效地监听系统设置的变化,例如屏幕亮度等。这种机制使得应用能够动态响应系统设置的更改,提升用户体验。在实现需要与系统设置交互的应用时,合理使用是非常重要的。

执剑人 1311

C语言中函数与数据传递

C语言,递归函数,函数间传递 string族函数等

weixin_55530858的博客 3370

YOLOv8中Anchor-Based、Anchor-Free及样本分配策略

本文主要介绍yolov8中的anchor机制与样本分配策略的静态策略和动态策略

qq_52889317的博客 2211

C语言函数

文章目录函数形参与实参的关系:函数调用的内存逻辑局部变量与栈内存局部变量的特点:栈内存的特点:技术要点:static关键字和静态函数静态变量:静态函数:要点:使用递归的条件设计一个递归算法注意:递归是一个函数嵌套调用的过程,递归次数越多,运行时间会大幅度增加,内存空间也会大量占用,所以,一般能用循环解决的,我们就不考虑递归缺点:**效率低**,**还比较占内存**递归算法的一般应用 函数 形参与实参的关系: ​ 实参和形参位于不同的内存区域,彼此独立 ​ 形参变量只有在函数被调用的时候,才会分配内存,

qq_45698138的博客 1398

Zabbix-01简单导入MIB文件并测试

这里写自定义目录标题安装 MIB文件启用MIB文件测试MIB文件 MIB文件 MIB代表管理信息库。 MIB文件允许您使用OID(对象标识符)的文本表示。 ##例如: ifHCOutOctets 是OID【1.3.6.1.2.1.31.1.1.1.10】的文本表示 安装 MIB文件 在基于Debian的系统上: # apt install snmp-mibs-downloader # download-mibs 在基于RedHat的系统上: # yum install net-snmp-libs 启用M

lokibaba的博客 9178

视觉自动对焦(Z 轴运动 + 相机拍照 + 清晰度计算) 的核心程序

控制 Z 轴匀速扫动一段距离,在移动过程中等间距触发相机拍照,后台计算每张图的清晰度,最后移动到最清晰的位置,完成自动对焦。

StevenChen的博客 307

【C语言】C语言中的函数及参数传递,变量的作用域和生存期、多文件程序、宏定义

C语言中的函数及参数传递,变量的作用域和生存期、多文件程序、宏定义

m0_48945495的博客 2310

支持向量机算法之鸢尾花特征分类【机器学习】

支持向量机(SVM)是一种二元分类模型。它的基本模型是在特征空间中定义最大区间的线性分类器,这使它不同于感知器;支持向量机还包括核技术,这使得它本质上是一个非线性分类器。支持向量机的学习策略是区间最大化,它可以形式化为求解凸二次规划的问题,等价于正则化铰链损失函数的最小化。支持向量机的学习算法是求解凸二次规划的优化算法。Scikit learn(sklearn)是机器学习中常见的第三方模块。它封装了常见的机器学习方法,包括回归、降维、分类、聚类等。实例的特征向量(以2D为例)映射到空间中的一些点,如下图中的

一键难忘的博客 4971

C语言数组当参数传递

在学习C语言的过程中遇到数组作为参数传递的问题 一维数组:#include int test2(int a[]){ for(int i=0;i<5;i++){ printf("%d",a[i]); } } int main(){ int a[5] = {1,2,3,4,5},*p; p = a; test2(a); } 这样我们可以很顺利的在test去遍历这个

Laoynice的博客 10万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C语言之函数的参数传递

本文主要介绍C语言参数的三种传递方式,以及个人遇到的一些问题及解决方法 C语言中,传递参数的主要方式有三种: 1.值传递方式 2.地址传递方式 3.引用传递 一、值传递 值传递,指的是将实参的值复制并赋值给形参。这里需要注意的地方是,实参和形参的存储单元并不相同,实参的存储单元由实参的定义方式决定,而形参的存储单元则是栈,对应的存储单元在函数调...

qq_35600620的博客 6626

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

阐述 C 语言中的参数传递机制

在 C 语言中,参数传递是函数之间进行数据交互的重要方式。C 语言主要采用了两种参数传递机制:值传递和指针传递。 ![分割线](https://i-blog.csdnimg.cn/direct/ec9ac2317d534fedac9af54998d35be5.png) # 一、值传递 值传递是指在函数调用时,将实际参数的值复制一份传递给函数的形式参数。在函数内部对形式参数的修改不会影响到实际参数的值。

技术笔记 1959

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C语言函数返回值与参数传递

C语言函数返回值与参数传递 一:参数传递 C语言的函数中必不可少的就是参数传递,可以采用传值和传指针两种方式。 1.传值的形式:只是将参数值的拷贝传给函数,并非参数本体如: int test(int x,int y) { x=2*y; return x; } int main(void) { int a=0,b=5; printf("%d,%d\n\r",test...

qq_37071812的博客 7649

c语言参数传递机制优缺点,C语言中的参数传递机制详解

本文尝试讨论下C中实参与形参的关系,即参数传递的问题。C语言的参数传递值传递首先看下列代码:编译后执行结果如下:可以看到,在调用函数 change 时,会在内存中单独开辟一个空间用于存放形式参数 i ,实参 n 的值会复制给形参 i 。对于形参的任何操作都不会影响到主调函数中的实参 n 。这种参数传递方式是便是典型的值传递。上例中的参数类型是int型,实际上,对于整形(int、short、long...

weixin_36204626的博客 542

C语言函数间参数传递

在C语言中,函数间参数传递可以通过值传递、地址传递、数组传递和指针传递等方式实现。不同的传递方式有不同的特点和适用场景,程序员需要根据具体情况选择合适的传递方式。在C语言中,函数是程序的基本组成单元之一,而参数传递则是函数间交换信息的重要方式之一。在值传递中,函数调用时实参的值被复制到形参中,函数内部对形参的修改不会影响实参的值。通过传递变量的地址作为参数,函数可以直接修改实参的值。在C语言中,数组本质上是指向数组首元素的指针,因此传递数组时实际上传递的是数组首元素的地址。

2401_83379409的博客 1612

C语言参数传递——值传递与地址传递

最近开始复(yu)习(xi)C语言,看到参数传递这里,又遇到了以前一直没有搞清楚的一个问题,我相信这个问题大家许多初学者也会遇到过,就是C语言函数的参数传递方式。 C语言中参数的传递有两种方式: 1)值传递 2)地址传递 3)数组作为函数参数

ThereIsNoCode 1万+

C语言参数传递

C语言参数传递方式有传值和传地址两种方式。        1、传值方式         原理:形参和实参占不同内存单元,传递的实际上是实参变量或表达式的一个拷贝副本,将这个副本值传给形参,形参内存单元内容保存的正是这个副本值,相当于给形参进行初始化,形参的值发生变化也不会传回给实参,因此是单向传递。        例如:                 void increase(int

charliezheng198893的专栏 3246

C语言的三种参数传递方式

原 C语言的3种参数传递方式 2017年09月14日 18:30:26 采香行处 阅读数:14619 </div> <div class="operating"> <...

qq_43476600的博客 4334

c 语言中方法及参数传递,C语言中的参数传递机制详解

C中的参数传递本文尝试讨论下C中实参与形参的关系,即参数传递的问题。C语言的参数传递值传递首先看下列代码:#include int main(){int n = 1;printf("实参n的值:%d,地址:%#x\n", n, &n);void change(int i);//函数声明change(n);printf("函数调用后实参n的值:%d,地址:%#x\n", n, &n)...

weixin_39843093的博客 554
上一篇: struts框架
下一篇: 流浪人与流浪动物那个重要
damfool
博客等级 码龄22年 19粉丝 41原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值