结构体
结构体的一般形式为:
struct 结构体名:用来标识(zhì)一个结构体
{
成员列表:成员可以是任何c语言的数据类型
}; 注意:这里一定要写分号:因为声明结构体也是一个c语言语句
声明了一个结构体,相当于构造了一种新的数据类型,此时系统并不为它分配内存空间,只有定义力结构体类型的变量,系统才为该变量分配内存空间,声明了结构体后,就可以定义结构体类型的变量,定义
的一般形式为:
结构体名 变量名;
例如:struct person p1,p2;
这个是以person为数据类型,定义了两个变量p1,p2;struct 为定义结构体变量的关键字.定义力结构图变量后,系统会为他分配空间
字节对齐:就是加快系统的访问效率
三种定义结构体的方法:
1
struct person 声明了结构体名字
{
char name[20];
int age;
char sex;
char phone[15];
}p1,p2; 同时定义了两个结构体变量
2
struct
{
char name[20];
int age;
char sex;
char phone[15];
}p1,p2; 这个只是定义了两个结构图变量,但是没有声明结构体的名字
3 嵌套结构体
struct date
{
int year;
int monyh;
int day;
};
struct person
{
char name[20];
int age;
char sex;
char phone[15];
struct date brithday;
char *string;
}
总结:定义在前面的是结构体名字,在后面的是变量名字
引用和初始化结构体变量
一般的形式是:结构图变量.成员名
例子:strcpy(p1.name,“John”);
p1.age=24;
.的作用:.是成员运算符,用于取得结构体中的成员,他在所有的运算符中 优先级最高
嵌套的初始化的方式:p1.birthday.year = 1985;//这里的p1和birthday都是结构图变量名
定义的同时进行初始化: struct person p2={“Bill”,22,‘m’,“987654321”};
注意:结构体中的变量成员也可以像其他的变量一样进行各种初始化 p1.age++ //.的优先级是最高的
结构体和数组:结构体中可以有数组类型的成员,数组的元素也可以是结构体
例子:struct student s[2] ={
{1000,“zhang”,‘m’,21,“shanghai”}{10001,“li”,‘f’,20,“bei jing”}};
结构体和指针
结构体中各个成员按顺序连读存放在内存中,一个结构体指针指向结构体变量,结构体指针所保存的是他指向的结构体变量所占内存的首地址
事例:
struct student s1;
struct student *p;
s1.number=10002;
s1.sex=‘m’;
s.age=22;
strcpy(s1.name,“Liu”);
strcpy(s1.addr,“Guang Dong”);
p=&s1;
printf("%d,%s,%c,%d,%s\n",p->number,p->sex,p->age,p->addr);
在c语言中为了方便使用和直观,吧(*p).number改为p->number.这两种写法都是正确的,但是基本上使用的是第二种
语法: 指针->结构体成员
p->number++ 这个是可以的,因为->与.的结合性都是一样高的,所以先与这两个结合,取得number的值过后,然后再对这个值进行自加
++pp->number 这个的意思是:先得到number的值,然后再自加