What
结构体数据类型。
相当于一个模板,当程序创建一个结构体变量时,编译器就会按照这个模板里的成员来分配内存空间,并在成员名挂载在结构体变量中。
How
通过struct关键字声明结构体
struct Person //声明一个结构,并标记为Person。简单来说就是声明一个Person结构。这里只是告诉编译器如何表示数据,并没有为数据分配空间
{
// char name[10];//char * str和 char str[10]的区别 前者是结构中只存放地址,不为字符串分配存储空间,适用于另外的地方已经为字符串分配了空间,后者是存储在结构内存,会分配10个字节来存放字符串,然后把静态存储区的字符串复制一份过来。无疑的额外占用内存
char *name;
int age;
};
struct Person person = {"Lingzhi",21};//编译器按照Person这个模板来分配内存空间,并把值存储在内存单元中,同时模板中的成员名也挂载到了结构体变量上
person1.name = "Ling";//通过.的方式 访问元素
person1.age = 20;
char * str和 char str[10]的区别 前者是结构中只存放地址,不为字符串分配存储空间,适用于另外的地方已经为字符串分配了空间,后者是存储在结构内存,会分配10个字节来存放字符串,然后把静态存储区的字符串复制一份过来。无疑的额外占用内存
创建结构体的三种方式
//第一种就是上文的方式
//第二种匿名结构体
struct
{
char *name;
int age;
}person,person1;
//第三种
struct
{
char *name;
int age;
}person2={"Lingzhi",21},person3={"Ling",20};
Why
由于C语言是面向过程编程,没有面向对象的概念。所以我们想要使用对象这种结构的时候,就需要通过结构体。
注意
- 声明结构体的时候,编译器并不会分配内存空间,它只是告诉编译器如果表示数据,为结构体变量提供一个模板。只有当定义结构体变量的时候,编译器就根据这个模板来分配内存空间,并把模板中的元素名挂载到结构体变量上。这样结构体变量就可以通过.的方式访问元素。
- 因为内存对齐的原因,结构体内的成员即使是一样的数据类型,但是分配出来的结构体的大小是可能会不一样的。