Go学习每日一问(16)-不定参数类型
文章目录
每次学习并整理一个Golang的知识点,每天进步一点点。今天学习下go中的一个知识点:不定参数类型🤔
日省吾身
1.下面代码的输出结果?()
|
|
- A. 1
- B. 2
- C. 3
2.对add()函数调用正确的是?()
|
|
- A. add(1, 2)
- B. add(1, 3, 7)
- C. add([]int{1, 2})
- D. add([]int{1, 3, 7}…)
思考后看下方答案…
答疑解惑
参考答案:
1. B 知识点:指针;
- increment() 函数里的 p 是
*int
类型的指针,*p++
是将该地址的值执行一个自增操作,并返回自增后的结果; - main() 函数中
increment(&n)
调用后将变量 n 的地址的值+1,所以得到2;
2. ABD 知识点:不定参数类型;
- 不定参数是指函数传入的参数个数为不定数量;
- 为了做到上述要求,首先需要将函数定义为接受不定参数类型,如题干所示;
- 题干代码的意思是:函数
add()
,接收不定数量的参数,且这些参数的类型均为int
型; - 它的调用的方式为:
add(x, y)
、add(x, y, z)
,所以A和B选项肯定是正确的; - 形如
...type
格式的类型,只能作为函数的参数类型存在,且必须是最后一个参数;他是一个语法糖,即这种语法对语言的功能没有影响,只是为了方便程序员使用,增加程序的可读性; - slice后面带三点省略号的形式,相当于把slice中包含的元素打散后传入;D选项相当于
add(1, 3, 7)
,也是正确的;
以上,你做对了吗?😊
其他相关答案或补充知识点,欢迎在评论区留言补充!
拓展阅读
假如没有...type
的语法糖,开发者不得不这么写:
|
|
从函数的实现角度来看,这么写没有任何问题。但从调用方来说,只能这么调用:
|
|
我们不得不加上[]int{}
这一步,来构造一个切片实例;有了...type
的语法糖,我们就可以直接省略这一步了。
任意类型的不定参数
上面的例子中,将不定参数的类型限定为int类型;如果你想传递任意类型的参数,可以使用interface{}
;下面是go语言标准库中fmt.Printf()函数的实现:
|
|
使用interface{}传递任意类型数据是Go语言的惯例用法,且他仍然是类型安全的;
下期提问
- 判断下面代码能否正常执行?如果可以,写出输出结果?
|
|
答案及解析将在下期文章中给出,欢迎大家在评论区写出你的答案;独乐乐不如众乐乐,交流学习,互相进步。
欢迎转发和评论。更多优质原创文章,欢迎关注微信公众号“IYue爱月”或扫描下方二维码: