值传递、引用、指针
发表于:2024-12-20 | 分类: C++
字数统计: 378 | 阅读时长: 1分钟 | 阅读量:

值传递、引用、指针

说明

值传递

  • 复制原数据,处理的事复制的文件
  • 特点:
    • 不会修改原来的数据,适合不修改的场景
    • 需要复制,不适合大对象(如STL容器)和字符串【性能和复制出错】

引用

  • 就是原数据本身
  • 特点:
    • 不会复制,修改和访问原对象
    • 如果只做访问,推荐加上const

指针

  • 地址,指向原对象
  • 特点
    • 适合动态分配的场景
    • 可以访问和修改,值访问也推荐加上const
    • 空指针问题

案例

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>
#include <string>

using namespace std;

class Person
{
public:
string name;
int age;

// 这里使用引用避免拷贝
Person(string &n, int a) : name(n), age(a) {}

void display() const
{
cout << "Name: " << name << ", Age: " << age << endl;
}
};

// 值传递
void modifyByValue(Person p)
{
p.name = "Value Modified";
p.age = 99;
}

// 引用传递
void modifyByReference(Person &p)
{
p.name = "Reference Modified";
p.age = 88;
}

// 指针传递
void modifyByPointer(Person *p)
{
if (p)
{
// 检查指针是否为空
p->name = "Pointer Modified";
p->age = 77;
}
}

int main()
{
Person person("Original", 25);

cout << "修改前:" << endl;
person.display();

// 值传递
modifyByValue(person);
person.display(); // 原对象未被修改

// 引用传递
modifyByReference(person);
person.display(); // 原对象被修改

// 指针传递
modifyByPointer(&person);
person.display(); // 原对象被修改

// 空指针传递示例
Person *nullPerson = nullptr;
modifyByPointer(nullPerson); // 不会崩溃,因为检查了空指针

return 0;
}
上一篇:
STL库vector
下一篇:
Linux VS Code 图形转发