什么是传值,什么是传址
时间: 2023-09-13 08:03:58 浏览: 58
传值是指将实际参数的值复制到函数的局部变量中,函数使用这个副本执行必要的功能。这样,函数对副本的修改不会影响到实际参数的值。\[2\]
传址是指将实际参数的地址传递给函数,函数通过操作这个地址上的值来修改实际参数的值。这样,函数对地址上的值的修改会影响到实际参数的值。\[1\]
#### 引用[.reference_title]
- *1* *2* *3* [数据结构——传值&传址](https://blog.csdn.net/Labrador_Katie/article/details/121788445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
相关问题
数据结构传值,什么是传址
传址是指在函数调用中,将实参的地址传递给形参,使得形参可以直接访问和修改实参的值。通过传址,形参和实参共享同一块内存空间,对形参的修改会直接影响到实参的值。传址可以通过指针作为形参来实现,函数内部可以通过解引用指针来访问和修改实参的值。传址的优点是可以减少内存的开销,因为不需要复制实参的值,而是直接操作实参的内存空间。
#### 引用[.reference_title]
- *1* *2* [数据结构——传值&传址](https://blog.csdn.net/Labrador_Katie/article/details/121788445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [c语言入门--函数的参数、传值调用和传址调用](https://blog.csdn.net/m0_70780664/article/details/126649700)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
vector pushback 加入一个结构,是传值还是传址
当使用 `push_back()` 函数将一个结构体添加到 vector 中时,实际上是将这个结构体的副本(也就是值)添加到 vector 中。因此,如果你修改 vector 中的某个结构体元素,不会影响原始的结构体值。
如果你想要在 vector 中存储结构体的指针而不是结构体本身,那么你需要将结构体的地址传递给 `push_back()` 函数。这样,你就可以通过指针修改原始的结构体值。
下面是一个例子,演示了如何将结构体的指针添加到 vector 中:
```c++
#include <iostream>
#include <vector>
using namespace std;
struct Person {
string name;
int age;
};
int main() {
vector<Person*> people;
Person person1 = {"Alice", 20};
Person person2 = {"Bob", 25};
people.push_back(&person1);
people.push_back(&person2);
// 修改原始结构体的值
people[0]->age = 21;
// 输出 vector 中的元素
for (int i=0; i<people.size(); i++) {
cout << people[i]->name << " " << people[i]->age << endl;
}
return 0;
}
```
输出结果为:
```
Alice 21
Bob 25
```
可以看到,通过将结构体的指针添加到 vector 中,我们可以修改原始结构体的值。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)