面试题答案
一键面试值传递
- 优点:
- 代码更清晰直观,因为函数接收的是结构体的副本,对副本的操作不会影响原结构体,在一定程度上增强了程序的可维护性和安全性。
- 无需担心空指针异常,因为传递的是值,而不是指针。
- 缺点:
- 性能开销大,当结构体较大时,会占用较多内存空间来复制结构体,传递和复制的过程也会消耗时间,尤其是在频繁调用函数的场景下,性能影响更为明显。
指针传递
- 优点:
- 性能好,因为传递的只是一个指针(在64位系统上通常是8字节),相比传递整个大型结构体,内存占用和传递时间都大大减少,在处理大型结构体时效率更高。
- 可以在函数内部修改原结构体的值,适用于需要对传入的结构体进行修改的场景。
- 缺点:
- 增加了代码的复杂性,需要注意指针的合法性,例如避免空指针引用,否则可能导致程序崩溃。
- 由于函数可以修改原结构体,可能会带来一些不可预期的副作用,降低了代码的可维护性和可预测性。
结构体中有大切片的情况
应选择指针传递。因为切片本身虽然是一个轻量级的数据结构(包含指向底层数组的指针、长度和容量),但它所指向的底层数组可能非常大。如果使用值传递结构体,会复制整个切片(包括底层数组的指针、长度和容量),即使切片本身复制开销不大,但底层大数组可能占用大量内存,复制开销巨大。而使用指针传递结构体,就避免了大数组的复制,只传递一个指针,能显著提升性能。