数据结构与算法 复习记录(一)

C++ 各类传参的书写格式总结


1. 基本数据类型

方式书写格式说明
按值传递void func(int a);传递副本,不影响原数据
按指针传递void func(int* a);传递地址,可修改原数据,需检查 nullptr
按引用传递void func(int& a);传递别名,直接修改原数据
按常量引用传递void func(const int& a);传递别名,保护数据不被修改

2. 数组

方式书写格式说明
按指针传递void func(int* arr, int size);传递指针,需额外传递大小
按引用传递void func(int (&arr)[5]);传递数组的引用,大小必须固定
std::array 传递void func(const std::array<int, 5>& arr);避免退化,更安全

3. STL 容器(vector, list, map, etc.)

方式书写格式说明
按指针传递void func(std::vector<int>* v);允许 nullptr,需使用 -> 访问
按引用传递void func(std::vector<int>& v);避免拷贝,提高效率
按常量引用传递void func(const std::vector<int>& v);保护数据,避免不必要的拷贝

4. 类对象

方式书写格式说明
按值传递void func(Person p);产生拷贝,适用于小对象
按指针传递void func(Person* p);允许 nullptr,需检查
按引用传递void func(Person& p);避免拷贝,直接操作对象
按常量引用传递void func(const Person& p);避免拷贝,保护数据不被修改

C++ 二维数组的传参方式对比

都是 两行三列 二维数组

C/C++ 中的二维数组(如 int arr[2][3])本质上是 按行优先顺序连续存储的一维数组

int arr[2][3] = {{1,2,3}, {4,5,6}};

//地址低 → 高:[1,2,3,4,5,6]
// 只有知道 列数, 才能推出在第几行  所以 列数必须传
`void func(int (*arr)[3], int rows);`
    表示 arr 是一个 指向包含3个int的数组的指针。
方式书写格式适用场景说明
按指针传递void func(int (*arr)[3], int rows);固定列数不能自动推导列数
按引用传递void func(int (&arr)[2][3]);固定大小数组不会退化,自动推导大小
使用 std::vectorvoid func(const vector<vector<int>>& arr);动态二维数组灵活,可变大小
使用 std::arrayvoid func(const array<array<int, 3>, 2>& arr);固定大小数组兼顾 安全性和性能

5. 指针与引用的综合

方式书写格式说明
指针的引用void func(int*& p);修改指针本身
数组指针void func(int (*arr)[3], int rows);适用于二维数组
二维数组引用void func(int (&arr)[2][3]);适用于固定大小的二维数组

🌟 总结

  1. 小数据类型(int, double)按值传递
  2. 大对象(std::string, std::vector, class)按引用传递
  3. 不修改数据使用 const &
  4. 数组传指针(int* arr)或引用(int (&arr)[size]
  5. 类对象传引用(Person& p)或 const 引用

这样写更高效、易读、安全!🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值