C语言函数参数传递详解
1.值传递和地址传递
(1)值传递:即按“值(如数字10)”传递参数,是将实参变量的值复制一个到临时存储单元中(该存储单元会随着调用的函数运行结束而释放掉),如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变
(2)地址传递:即按“地址(如0019FEDC)”传递参数,把实参变量的地址传送给被调用函数,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变
注:值传递在函数调用过程中会为形参重新开辟空间,形参与实参分别占用不同的地址空间,而地址传递,形参和实参共用同一内存地址
举栗子:
①值传递(普通类型变量的参数传递)
void fun1(int a){
a=2;
printf("在fun1函数中,变量a值的地址是:%p\n",&a);
a=a+1;
}
void main(){
int n=1;
printf("在main函数中,变量n的地址是:%p\n",&n);
fun1(n);
printf("fun1函数中形参a加1之后,实参n的值是%d\n",n);//n的值任然不变还是1
}
运行结果
②地址传递(指针作为参数)
void fun2(int *q){
printf("在fun2函数中q的值是(和m的地址,p的值一样):%p\n",q);
*q=*q+5;
}
void main(){
int m=10;
int *p=&m;
printf("在main函数中,m值的地址:%p\n",&m);
printf("在main函数中,p指针的值(p所指向变量的地址):%p\n",p);
printf("在main函数中,p指针的地址(指针变量本身也要占存储单元):%p\n",&p);
fun2(p);//传的是p的值,该值是m的地址
printf("执行fun2函数后,m的值是(由于形参和实参共用内存的同一地址,形参改变实参也改变):%d\n",m);
}
注:当 “ * ” 有两个作用 。作用一(定义指针变量):int *p; 作用二(取值):int m=10; int p=&m; printf(*p)//输出10
运行结果
③数组名的参数传递
“数组名的值”和数组的地址都存储了数组的首地址
void fun3(int arr[]){
for(int i=0;i<5;i++){
printf("%d",arr[i]);
}
}
void fun4(int *arr){
for(int i=0;i<5;i++){
printf("%d",arr[i]);
}
}
void main(){
int arr[5]={1,3,5,7,9};
int*r;
r=arr;
fun3(arr);//传数组名
printf("\n");
fun4(r);//传递指针
printf("\n");
printf("数组名的值:%p\n",arr);
printf("数组的地址值:%p\n",&arr);
}
运行结果
C语言函数参数传递详解相关推荐
- C++函数参数传递详解
目录 第一种传递方式:按值传递 第二种传递方式:指针传递 第三种传递方式:引用传递 const参数 main()函数的参数 大家都知道,在函数中参数分为实参和形参(参看本篇文章)https://mp. ...
- c 传入易语言字节,易语言字节集参数传递详解
易语言多线程之字节集参数传递 传递文本可以直接传递文本的指针,但是字节集却不能这样,看下面直接传递字节集指针的代码: .版本 2 .支持库 spec .支持库 EThread .程序集 窗口程序集1 ...
- C++语言函数重载详解和示例
C++ 函数重载的概念 在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同.例如把变量的值写入文件,变量的类型int.long.double.char,需要通过参数把变量传入函数.在 ...
- C语言---函数介绍详解
生活的全部意义在于无穷地探索尚未知道的东西,在于不断地增加更多的知识--左拉 文章目录 前言 函数 模块化程序设计方法 函数的定义 函数的分类 函数定义角度 库函数 自定义函数 函数形式角度 无参函数 ...
- 七、C语言函数定义详解
文章目录 1.函数的声明和定义 2.函数的调用 3.函数参数的两种传递方式 1.传值调用(C语言默认传递参数方式) 2.引用调用 4.函数的分类 1.内部函数(静态函数) 2.外部函数 1.函数的声明 ...
- 计算机科学类专升本复习之“C语言函数定义”详解(初稿)
今天首先要讲的是C语言的无参函数定义 函数 如果不接收"用户传递"的数据,那么定义时可以不带参数 例如: dataType kangkang(){ //nb } dataType: ...
- 【C语言函数参数详解】——实际参数(实参)形式参数(形参)
文章目录 一.什么是实际参数(实参) 二.什么是形式参数(形参) 三.形参与实参的关系 这篇文章我们一起学习一下函数的参数,函数的参数分为实参和形参. 一.什么是实际参数(实参) 首先我们来学习实参, ...
- c语言 is函数,关于C语言回调函数的详解~
原标题:关于C语言回调函数的详解~ 01 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义.我在百度上搜了一下, ...
- R语言tidyr包gather()函数实战详解:数据收缩、从宽表到窄表
R语言tidyr包gather()函数实战详解:数据收缩.从宽表到窄表 目录 R语言tidyr包gather()函数实战详解:数据收缩.从宽表到窄表 收缩两列数据
- R语言tidyr包spread()函数实战详解:数据裂变、从窄表到宽表
R语言tidyr包spread()函数实战详解:数据裂变.从窄表到宽表 目录 R语言tidyr包spread()函数实战详解:数据裂变.从窄表到宽表
最新文章
- python获取本机 ip地址、mac地址(物理地址)、计算机名、硬盘序列号、CPU序列号、主板序列号、bios序列号、bios uuid号
- eva每一集片尾曲是谁唱的_【跪求】EVA 18集片尾曲的歌手名,考验大家的听力~...
- java ast 添加注解_基于AST的组件化自动插桩方案
- spark 执行流程及各组件执行
- Labview 串口通信之——PC控制云台方向
- js前端导出excel:json形式的导出
- Java打印车票主要学习Java的比较语句
- ASP.NET MVC 在控制器中获取某个视图动态的HTML代码
- 微信小程序 - 基本学习资源
- C++ 引用和指针有什么区别?
- 超详细!一文详解 SparkStreaming 如何整合 Kafka !附代码可实践
- perl:非贪婪的数量词
- 技巧:Eclipse阿里代码规范插件
- android ssh软件,优秀的 Android SSH 工具推荐
- android 播放pcm的软件,应用AudioTrack播放PCM音频数据(android)
- 计算机专业哪个考研简单,考研哪些专业比较简单好考?
- java 多线程高级,java 多线程高级(传统多线程)
- 华为荣耀屏鸿蒙,荣耀智慧屏:华为鸿蒙迈出的第一步
- java心电图_使用原生js+canvas实现模拟心电图
- 【产品化 IT】在产品化 IT 的道路上避免流量拥堵的 3 种方法
热门文章
- 适合初学者的大数据学习路线
- 单片机:LCD1602
- matlab 整数规划 非线性,非线性整数规划matlab
- ArcGIS地理数据处理高级教程_004_1遇到没有地理参照系信息的数据怎么办
- 计算机办公自动化试题及答案,计算机等级考试,办公自动化考试试题(三)
- 计算机九宫格游戏怎么玩,《九宫格数独》怎么玩 数独玩法介绍
- php第三方分享插件下载地址,PhpWind安装分享插件
- 【输入法】迄今为止,居然有这么多汉字输入法!
- windows server2016 如何安装IIS
- win11 JDK环境变量的配置