C语言 函数值传递和址传递 - C语言零基础入门教程
目录
- 一.简介
- 1.函数声明:不需要实现这个函数的功能
- 2.函数定义:必须实现这个函数的功能
- 3.函数调用:调用之前必须先声明或者定义
- 二.函数值传递
- 三.函数址传递
- 四.函数值传递和址传递区别
- 五.猜你喜欢
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门
一.简介
函数声明只是一个空壳,不会有具体的函数实现,而定义要实现函数的实现,例如:
1.函数声明:不需要实现这个函数的功能
int sub(int x,int y); //只需要声明即可,不需要实现这个函数的功能
2.函数定义:必须实现这个函数的功能
int sub(int x,int y) 需要实现这个函数的功能
{return (x-y);
}
3.函数调用:调用之前必须先声明或者定义
函数在调用之前必须声明或者定义,否则会报错:找不到标识符,这也是为什么 hello world
中调用 printf
函数必须要包含 stdio.h
头文件的原因;
二.函数值传递
在 C
语言中,函数的参数传递方式有两种:值传递与地址传递。
**值传递:使用变量、常量、数组元素作为函数参数,在调用结束后,形参值的任何变化都不会影响到实参的值。**举个例子:
/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言 函数值传递和址传递
//@Time:2021/06/20 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/ #include <stdio.h>
void func(int x, int y)
{x = 100;y = 200;printf("func:x = %d, y = %d\n", x, y);
}
int main(void)
{int a=10;int b=20;/*变量a、b为func函数的实际参数*/func(a, b);printf("main:a = %d, b = %d\n", a, b);return 0;
}
/*
输出:
func:x = 100, y = 200
main:x = 10, y = 20
*/
main
函数中调用 func
函数,以整数类型 a
,b
作为实参传递,虽然在 func
函数中形参 x
,y
值发生改变,但是并以不会影响 main
函数中 a
,b
的值,这就是所谓的值传递;
三.函数址传递
在 C
语言中,函数的参数传递方式有两种:值传递与地址传递。
**址传递:使用指针变量或者内存地址作为函数参数,在调用结束后,实参跟随形参一起变化。**举个例子:
/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言 函数值传递和址传递
//@Time:2021/06/20 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/ #include <stdio.h>
void func(int *x, int *y)
{*x = 100;*y = 200;printf("func:x = %d, y = %d\n", x, y);
}
int main(void)
{int a=10;int b=20;/*分别对变量a、b取地址,并作为func函数的实际参数*/func(&a, &b);printf("main:a = %d, b = %d\n", a, b);return 0;
}
/*
输出:
func:x = 100, y = 200
main:x = 100, y = 200
main
函数中调用 func
函数,分别对变量 a
、b
取地址,并作为 func
函数的实参传递,由于形参 x
和实参 a
,形参x
和实参 a
指向同一个内存地址,在 func
函数中形参 x
,y
值发生改变,main
函数中 a
,b
的值也会跟着一起改变,这就是所谓的址传递;
四.函数值传递和址传递区别
- 值传递:实参是传递的值,并非地址,形参的值发生改变,实参不受影响;
- 址传递:实参是传递的地址,并非值,形参的值发生改变,实参会跟着一起改变(因为实参和形参都是指向同一块内存地址);
五.猜你喜欢
- C语言逻辑运算符
- C语言三目运算符
- C语言逗号表达式
- C语言 sizeof 和 strlen 函数区别
- C语言 strcpy 和 strcpy_s 函数区别
- C语言 memcpy 和 memcpy_s 区别
- C语言 数组定义和使用
- C语言 数组遍历
- C语言 数组下标越界
- C语言 数组内存溢出
- C语言 数组下标越界和内存溢出区别
- C语言 二维数组定义和使用
- C语言 二维数组行数和列数计算
- C语言 指针声明和定义
- C语言 指针 p++ / p–
- C语言 p++/§++/_(p++)/_p++
- C语言 使用指针遍历数组
- C语言 指针和数组区别
- C语言 数组指针
- C语言 指针数组
- C语言 指针数组和数组指针区别
- C语言 空指针 NULL
- C语言 void 指针
- C语言 野指针
- C语言 函数声明和定义
- C语言 函数声明和调用
- C语言 函数值传递和址传递
未经允许不得转载:猿说编程 » C语言 函数值传递和址传递
C语言 函数值传递和址传递 - C语言零基础入门教程相关推荐
- C语言 const 修饰函数参数 - C语言零基础入门教程
C语言 const 修饰函数参数 - C语言零基础入门教程 目录 一.const 简介 1.const 修饰变量 2.const 修饰指针 3.const 修饰在函数名前面 4.const 修饰在函数 ...
- C/C++ _wcsupr_s 函数 – unicode 字符串小写转大写 - C语言零基础入门教程
目录 一._wcsupr_s 函数简介 二._wcsupr_s 函数实战 三.注意问题 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 零 ...
- C/C++ _wcslwr_s 函数 – unicode 字符串大写转小写 - C语言零基础入门教程
目录 一._wcslwr_s 函数简介 二._wcslwr_s 函数实战 三.注意问题 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 零 ...
- C/C++ _strupr_s 函数 – 字符串小写转大写 - C语言零基础入门教程
目录 一._strupr_s 函数简介 二._strupr_s 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 零基础 C/C+ ...
- C/C++ _strlwr_s 函数 – 字符串大写转小写- C语言零基础入门教程
目录 一._strlwr_s 函数简介 二._strlwr_s 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 零基础 C/C+ ...
- C/C++ atol函数- C语言零基础入门教程
目录 一.ltoa 函数简介 二.int/long/unsigned long 区别 1.无符号整形(16 位系统) 2.有符号整形(16 位系统) 3.int 和 long 区别 三.atol 函数 ...
- C/C++ strtol 函数 - C语言零基础入门教程
目录 一.strtol 函数简介 二.strtol 函数函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.strtol 函数简 ...
- C/C++ strtod函数 - C语言零基础入门教程
目录 一.strtod 函数简介 二.strtod 函数函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.strtod 函数简 ...
- C/C++ ultoa函数 - C语言零基础入门教程
目录 一.ltoa 函数简介 二.int/long/unsigned long 区别 1.无符号整形(16 位系统) 2.有符号整形(16 位系统) 3.int 和 long 区别 三.ultoa 函 ...
最新文章
- 想找首歌来表达心情!
- lora发射和接收原理_四个要点,帮你搞定LoRa天线匹配电路
- Deepin v20依赖错误,检测更新失败解决办法
- [CTSC2017]吉夫特(思维+巧妙)
- php.ini settimelimit,PHP-set_time_limit()和ini_set('max_execution_time',...)之间的区别...
- Android Studio 第六十三期 - Android框架 -RecycleView所有用法
- 曹讯 计算机摄像学,计算摄像学: 全光视觉信息的计算采集
- 解决web网站被挂马清除方法
- 20172330 2018-2019-1 《程序设计与数据结构》实验一报告
- htc a620d 刷android,续航以及最后的总结_HTC A620d - CNMO
- cocos2dx 手游luac 解密 文件的key
- 如何推导高斯过程回归以及深层高斯过程详解
- plupload上传图片时浏览器自动旋转图片导致的bug修正
- android端使用百度地图
- HDU 6447 YJJ's Salesman
- (实测可用)STM32CubeMX教程-STM32L431RCT6开发板研究(RTC-DS1302时钟)
- 二维数组的length如何理解
- 计算机高级工程师如何评正高,如何评高级职称
- 转:条形码技术在供应链管理中的作用
- asp.net 浏览器下载文件的四种方式
热门文章
- PostgreSQL数据目录深度揭秘
- 获国际架构顶会ATC2021最佳论文!Fuxi2.0去中心化的调度架构详解
- 使用Blink SQL+UDAF实现差值聚合计算
- 混合云模式助力斗鱼搭建混搭大数据架构
- 全球独家 | 赋予企业级开源无限可能,阿里云首发云数据库MongoDB 4.2版本
- 配置管理 ACM 在高可用服务 AHAS 流控降级组件中的应用场景
- 阿里智能运维平台如何助力研发应对双11挑战
- Gartner预测:芯片短缺,十大汽车主机厂未来一半都将自主设计芯片
- 打破云原生时代存储瓶颈,SmartX 发布 K8s 云原生存储 IOMesh
- 零基础小白10分钟用Python搭建小说网站!网友:我可以!