#include <stdio.h>
#include <string.h>
typedef struct {
int num;
unsigned int age;
char name[30];
}STU;
void test1(STU std){
strcpy(std.name, "White");
printf("in1:%d\n", &std); // 6487392
}
void test2(STU st_list[]){
strcpy(st_list[0].name, "White");
printf("in2:%d\n", st_list); // 6487504
}
int main(void){
// 变量的拷贝
STU std1, std2 = {0, 20, "Black"};
std1 = std2;
printf("std1=%d\n", &std1); // 6487408
printf("std2=%d\n", &std2); // 6487456
std1.num = 1;
printf("%d\n", std1.num); // 1
printf("%d\n", std2.num); // 0
// 作为参数传参
test1(std1);
printf("out1:%d\n", &std1); // 6487440
printf("%s\n", std1.name); // Black
// 可以看出变量的赋值是深拷贝,是在内存中重新创建一个相同的结构体变量而不是引用
//-----------------------------------------------------------------------------------
// 结构体数组作为参数传参
STU st_list1[] = {{0, 22, "Black"}};
test2(st_list1);
printf("%s\n", st_list1[0].name); // White
printf("out2:%d\n", st_list1); // 647504
// 可以看出因为是数组,所以传入函数里的是地址 故函数里面处理的和外边的st_list1是同一个数组
return 0;
}
结果如下: