1、声明结构体变量方式
1.1、定义类型的同时定义变量(省略了类型名称)
1 2 3 4
| struct{ int age; char* name; } p;
|
1.2、先定义类型,再定义变量
1 2 3 4 5
| struct Person{ int age; char* name; }; struct Person p1;
|
1.3、定义类型同时定义变量
1 2 3 4
| struct Person{ int age; char* name; } p1;
|
2、结构体变量之间的赋值是值拷贝
2.1、代码
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
| #include<stdio.h> int main() { struct Person { int age; char* name; }; struct Person p1 = {.age=18,.name="xiaobei"}; struct Person p2; p2 = p1; printf("p1.age=%d\tp1.name=%s\n",p1.age,p1.name); printf("p2.age=%d\tp2.name=%s\n",p2.age,p2.name); p1.name = "xiaoming"; printf("p1.age=%d\tp1.name=%s\n",p1.age,p1.name); printf("p2.age=%d\tp2.name=%s\n",p2.age,p2.name); printf("====================结构体变量内存地址===================\n"); printf("p1=%p\n",&p1); printf("p1.age=%p\n",&p1.age); printf("p1.name=%p\n",&p1.name);
printf("p2=%p\n",&p2); printf("p2.age=%p\n",&p2.age); printf("p2.name=%p\n",&p2.name); return 0; }
|
2.2、运行结果

2.3、总结
由于结构体变量p1和p2的内存地址不同,因此只能是值传递
3、结构体类型作用域
3.1、源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include<stdio.h>
void test() { struct Person { int age; char* name; }; }
int main() { test(); struct Person p1; return 0; }
|
3.2、运行结果

3.3、总结
结构体也是有作用域,从定义类型的那一行开始,一直到代码块结束
4、结构体变量
4.1、源码
1 2 3 4 5 6 7 8 9 10 11 12
| #include<stdio.h> int main() { struct Person { int age; char* name; }; struct Person p; p = {.age=18,.name="xiaobei"}; return 0; }
|
4.2、运行结果

4.3、总结
之所以报错是因为结构体变量p的内存地址是指向age的,因此,不能够这样赋值,必须在声明时才能