结构体的定义使用关键字struct;
结构是用户自己定义的复合类型;这种类型通过将多种内置类型封装在一起形成一个新的类型;也就是说结构类型可以用来存储多种内置类型组成的结合体;
定义了结构类型之后,便可以定义这种类型的变量;
例:
struct people
{
char name[20];
int age;
char address[10];
};
结构类型的内存:在定义结构类型变量的时候系统申请相应的一块连续的内存空间用来存储结构体;其大小根据定义结构类型的时候使用的内置类型而定;
如上述的例子中的结构变量在定义的时候会申请sizeof(int)+2*sizeof(char)=6字节的内存空间;其中people是结构体类型的名称;即定义的新类型为people类型;
(此处注意:people是类似于int、char之类的类型名称;而非结构体变量名称;结构体是对由struct关键字定义的一类 类型的统称,就像”数据类型“之于int,char,等;)这个概念对于之后提及的结构体指针的理解至关重要;
结构体指针
既然上文中提到由struct定义的是一个类似于interesting,char之类的新类型,则同样可以通过这个类型来定义只想着类变量的指针;
例:
people * pointer_to_people;
同样的,对于people类型,我们可以通过typedef关键字来定义类型别名和指针类型:
typedef people student;//定义people类型别名为student
typedef people* peo_pointer;//定义people *指针类型
上述中的peo_pointer就可以作为一种新的指针类型来定义people类型的指针了:
peo_pointer pointer_to_people1;
成员的访问
复合类型的成员访问和内置类型的成员访问形式一样;可以通过名访问和指针访问两种方式——
people peopel1,people2;//声明两个people类型的变量
people * pointer;
pointer=&people2;//声明一个people类型的指针并初始化
/*成员访问*/
people1.name='a';//名访问通过运算符(.)实现
pointer->age=20;//指针访问通过运算符(->)实现
结构的初始化
使用--{}--赋值:
people1={"zhangsan",20,"beijing"}//大括号为空时所有元素置零;
使用“=”赋值操作符进行同类结构之间的赋值:
people2=people1;
通过上述名访问和指针访问初始化;