02-形参和实参

1. 概述

1.1 形参(形式参数)

在函数定义中出现的参数。
可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。

1.2 实参(实际参数)

函数被调用时给出的参数。
包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。

1.3 举例说明

下边代码中,ab为实参,xy为形参

package main
import "fmt"
func main(){
a := 7
b := 8
result := getSum(a,b)
fmt.Printf("%d 和 %d 的和是:%d",a,b,result)
}
func getSum(x int,y int)int{
sum := x + y
return sum
}

2. 直传递

2.1 概念

值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

2.2 示例

代码说明:

  • 定义结构体将领,实例化一个武将关羽。
  • 定义下邳之战函数投降将领为该函数的形参。
  • main函数调用下邳之战函数,并将关羽作为实参传入该函数
  • 代码
package main
import "fmt"
type 将领 struct {
姓名 string
势力 string
}
func main() {
关羽 := 将领{
姓名: "关羽",
势力: "蜀"}
fmt.Printf("下邳之战前关羽势力:%q\n",关羽.势力)
下邳之战(关羽)
fmt.Printf("最终关羽势力:%q\n",关羽.势力)
}
func 下邳之战(投降将领 将领){
fmt.Println("=============下邳之战===============")
投降将领.势力 = "魏"
fmt.Printf("下邳之战后关羽势力:%q\n",投降将领.势力)
fmt.Println("=============挂印封金===============")
}
  • 输出结果

结果说明:

  • 实参传入函数之前,关羽示例为蜀
  • 实参传入函数后,实参关羽被传给形参投降将领
  • 函数中,投降将领的势力被函数修改为魏
  • 函数结束后,打印关羽势力,仍为蜀。
下邳之战前关羽势力:"蜀"
=============下邳之战===============
下邳之战后关羽势力:"魏"
=============挂印封金===============
最终关羽势力:"蜀"
  • 结果分析

说明直接传递变量,函数不会改变实参的值。

3. 引用传递

3.1 概念

引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

3.2 示例

代码说明:

  • 定义结构体将领,实例化一个武将关羽
  • 定义下邳之战函数投降将领指针为该函数的形参。
  • main函数调用下邳之战函数,并将关羽的地址作为实参赋值给投降将领指针
  • 代码
package main
import "fmt"
type 将领 struct {
姓名 string
势力 string
}
func main() {
关羽 := 将领{
姓名: "关羽指针",
势力: "蜀"}
fmt.Printf("下邳之战前关羽势力:%q\n",关羽.势力)
下邳之战(&关羽)
fmt.Printf("最终关羽势力:%q\n",关羽.势力)
}
func 下邳之战(投降将领指针 *将领){
fmt.Println("=============下邳之战===============")
投降将领指针.势力 = "魏"
fmt.Printf("下邳之战后关羽势力:%q\n",投降将领指针.势力)
fmt.Println("=============挂印封金===============")
}
  • 输出
下邳之战前关羽势力:"蜀"
=============下邳之战===============
下邳之战后关羽势力:"魏"
=============挂印封金===============
最终关羽势力:"魏"

结果说明:

  • 实参传入函数之前,关羽势力为蜀
  • 实参传入函数后,实参关羽的地址被传给形参投降将领指针
  • 函数中,投降将领指针的势力被函数修改为魏
  • 函数结束后,打印关羽势力为魏。
  • 结果分析
    因为传入函数是关羽的地址,投降将领指针的类型是指针,指向了实参关羽的存储地址,当函数中投降将领指针指向地址的值被改变,意味着实参关羽的值被改变了

posted on   运维开发玄德公  阅读(44)  评论(0编辑  收藏  举报  

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示