结构体设定全局改变其内容后没有生效
时间: 2024-02-22 21:00:03 浏览: 12
在 C 语言中,结构体是一种复合数据类型,它由多个成员变量组成。如果在函数中对结构体变量进行修改,那么只会修改这个结构体变量的局部副本,不会影响到全局变量。因此,如果你在函数中修改了结构体变量的内容,但是没有生效,很可能是因为你修改的是局部变量而不是全局变量。
为了解决这个问题,你可以将结构体变量作为参数传递给函数,并在函数中对其进行修改。这样就可以修改全局变量的内容了,具体步骤如下:
1. 在定义结构体时,先声明结构体的类型:
```
typedef struct my_struct {
int id;
char *name;
// ...
} my_struct;
```
2. 在所有函数的外部声明全局变量:
```
my_struct arr[10]; // 定义长度为10的结构体数组
```
3. 在函数中将结构体变量作为参数传递给函数:
```
void modify_struct(my_struct *p) {
p->id = 100;
p->name = "world";
}
```
4. 在函数中使用指向全局变量的指针进行操作:
```
modify_struct(&arr[0]);
```
5. 在其他函数中可以直接使用修改后的全局变量:
```
void print_arr() {
for (int i = 0; i < 10; i++) {
printf("%d, %s\n", arr[i].id, arr[i].name);
}
}
```
这样就可以在函数中修改全局变量的内容了。需要注意的是,如果在函数中使用了动态内存分配来创建结构体变量,也可以使用类似的方式来操作。