在子函数里给结构体赋别的值,结构体会发生变化吗
时间: 2023-11-30 16:03:14 浏览: 38
是的,给结构体里的成员变量赋值会改变整个结构体的值。当你将结构体传递给一个函数时,实际上是将结构体的副本传递给该函数。因此,如果在函数中更改结构体的成员变量的值,它将更改结构体的原始副本。例如:
```c
#include <stdio.h>
struct person {
char name[20];
int age;
};
void set_age(struct person p, int new_age) {
p.age = new_age;
}
int main() {
struct person john = {"John", 25};
printf("Before: %s is %d years old\n", john.name, john.age);
set_age(john, 30);
printf("After: %s is %d years old\n", john.name, john.age);
return 0;
}
```
在此示例中,`set_age`函数接收一个`person`结构体的副本,并将其年龄设置为新的年龄。但是,即使在函数中更改了年龄,原始结构体`john`的年龄仍保持不变。因此,输出将是:
```
Before: John is 25 years old
After: John is 25 years old
```
要更改原始结构体的值,可以通过将结构体指针作为参数传递给函数来实现。如下所示:
```c
#include <stdio.h>
struct person {
char name[20];
int age;
};
void set_age(struct person *p, int new_age) {
p->age = new_age;
}
int main() {
struct person john = {"John", 25};
printf("Before: %s is %d years old\n", john.name, john.age);
set_age(&john, 30);
printf("After: %s is %d years old\n", john.name, john.age);
return 0;
}
```
在此示例中,`set_age`函数接收一个指向`person`结构体的指针,并将其年龄设置为新的年龄。通过传递`&john`,我们将原始结构体的地址传递给该函数。因此,即使在函数中更改了年龄,原始结构体`john`的年龄也会更改。因此,输出将是:
```
Before: John is 25 years old
After: John is 30 years old
```
相关推荐
![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_column_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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)