目录

  • 一.简介

    • 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 函数,以整数类型 ab 作为实参传递,虽然在 func 函数中形参 xy 值发生改变,但是并以不会影响 main 函数中 ab 的值,这就是所谓的值传递;

三.函数址传递

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 函数,分别对变量 ab 取地址,并作为 func 函数的实参传递,由于形参 x 和实参 a,形参x和实参 a 指向同一个内存地址,在 func 函数中形参 xy 值发生改变,main 函数中 ab 的值也会跟着一起改变,这就是所谓的址传递;

四.函数值传递和址传递区别

  • 值传递:实参是传递的值,并非地址,形参的值发生改变,实参不受影响;
  • 址传递:实参是传递的地址,并非值,形参的值发生改变,实参会跟着一起改变(因为实参和形参都是指向同一块内存地址);

五.猜你喜欢

  1. C语言逻辑运算符
  2. C语言三目运算符
  3. C语言逗号表达式
  4. C语言 sizeof 和 strlen 函数区别
  5. C语言 strcpy 和 strcpy_s 函数区别
  6. C语言 memcpy 和 memcpy_s 区别
  7. C语言 数组定义和使用
  8. C语言 数组遍历
  9. C语言 数组下标越界
  10. C语言 数组内存溢出
  11. C语言 数组下标越界和内存溢出区别
  12. C语言 二维数组定义和使用
  13. C语言 二维数组行数和列数计算
  14. C语言 指针声明和定义
  15. C语言 指针 p++ / p–
  16. C语言 p++/§++/_(p++)/_p++
  17. C语言 使用指针遍历数组
  18. C语言 指针和数组区别
  19. C语言 数组指针
  20. C语言 指针数组
  21. C语言 指针数组和数组指针区别
  22. C语言 空指针 NULL
  23. C语言 void 指针
  24. C语言 野指针
  25. C语言 函数声明和定义
  26. C语言 函数声明和调用
  27. C语言 函数值传递和址传递

未经允许不得转载:猿说编程 » C语言 函数值传递和址传递

C语言 函数值传递和址传递 - C语言零基础入门教程相关推荐

  1. C语言 const 修饰函数参数 - C语言零基础入门教程

    C语言 const 修饰函数参数 - C语言零基础入门教程 目录 一.const 简介 1.const 修饰变量 2.const 修饰指针 3.const 修饰在函数名前面 4.const 修饰在函数 ...

  2. C/C++ _wcsupr_s 函数 – unicode 字符串小写转大写 - C语言零基础入门教程

    目录 一._wcsupr_s 函数简介 二._wcsupr_s 函数实战 三.注意问题 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 零 ...

  3. C/C++ _wcslwr_s 函数 – unicode 字符串大写转小写 - C语言零基础入门教程

    目录 一._wcslwr_s 函数简介 二._wcslwr_s 函数实战 三.注意问题 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 零 ...

  4. C/C++ _strupr_s 函数 – 字符串小写转大写 - C语言零基础入门教程

    目录 一._strupr_s 函数简介 二._strupr_s 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 零基础 C/C+ ...

  5. C/C++ _strlwr_s 函数 – 字符串大写转小写- C语言零基础入门教程

    目录 一._strlwr_s 函数简介 二._strlwr_s 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 零基础 C/C+ ...

  6. C/C++ atol函数- C语言零基础入门教程

    目录 一.ltoa 函数简介 二.int/long/unsigned long 区别 1.无符号整形(16 位系统) 2.有符号整形(16 位系统) 3.int 和 long 区别 三.atol 函数 ...

  7. C/C++ strtol 函数 - C语言零基础入门教程

    目录 一.strtol 函数简介 二.strtol 函数函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.strtol 函数简 ...

  8. C/C++ strtod函数 - C语言零基础入门教程

    目录 一.strtod 函数简介 二.strtod 函数函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.strtod 函数简 ...

  9. C/C++ ultoa函数 - C语言零基础入门教程

    目录 一.ltoa 函数简介 二.int/long/unsigned long 区别 1.无符号整形(16 位系统) 2.有符号整形(16 位系统) 3.int 和 long 区别 三.ultoa 函 ...

最新文章

  1. 想找首歌来表达心情!
  2. lora发射和接收原理_四个要点,帮你搞定LoRa天线匹配电路
  3. Deepin v20依赖错误,检测更新失败解决办法
  4. [CTSC2017]吉夫特(思维+巧妙)
  5. php.ini settimelimit,PHP-set_time_limit()和ini_set('max_execution_time',...)之间的区别...
  6. Android Studio 第六十三期 - Android框架 -RecycleView所有用法
  7. 曹讯 计算机摄像学,计算摄像学: 全光视觉信息的计算采集
  8. 解决web网站被挂马清除方法
  9. 20172330 2018-2019-1 《程序设计与数据结构》实验一报告
  10. htc a620d 刷android,续航以及最后的总结_HTC A620d - CNMO
  11. cocos2dx 手游luac 解密 文件的key
  12. 如何推导高斯过程回归以及深层高斯过程详解
  13. plupload上传图片时浏览器自动旋转图片导致的bug修正
  14. android端使用百度地图
  15. HDU 6447 YJJ's Salesman
  16. (实测可用)STM32CubeMX教程-STM32L431RCT6开发板研究(RTC-DS1302时钟)
  17. 二维数组的length如何理解
  18. 计算机高级工程师如何评正高,如何评高级职称
  19. 转:条形码技术在供应链管理中的作用
  20. asp.net 浏览器下载文件的四种方式

热门文章

  1. PostgreSQL数据目录深度揭秘
  2. 获国际架构顶会ATC2021最佳论文!Fuxi2.0去中心化的调度架构详解
  3. 使用Blink SQL+UDAF实现差值聚合计算
  4. 混合云模式助力斗鱼搭建混搭大数据架构
  5. 全球独家 | 赋予企业级开源无限可能,阿里云首发云数据库MongoDB 4.2版本
  6. 配置管理 ACM 在高可用服务 AHAS 流控降级组件中的应用场景
  7. 阿里智能运维平台如何助力研发应对双11挑战
  8. Gartner预测:芯片短缺,十大汽车主机厂未来一半都将自主设计芯片
  9. 打破云原生时代存储瓶颈,SmartX 发布 K8s 云原生存储 IOMesh
  10. 零基础小白10分钟用Python搭建小说网站!网友:我可以!