linux基础

6.结构体

2017-08-06  本文已影响30人  一漫116

一、定义

C 数组允许定义可存储相同类型数据项的变量

结构是 C 编程中另一种用户自定义的可用的数据类型

它允许存储不同类型的数据项。

结构体:是一种数据类型,是我们根据自己的需要构造出来的数据类型,它是由若干个数据项组合而成的复杂数据类型,这些数据项称为该结构类型的成员。

定义一个结构:

格式:

struct 结构体名

{

    datatype 变量名1;

    datatype 变量名2;

    ....

};

//datatype是c语言中有效的数据类型,如:int,char,float

例:

struct student

{

    int num;                      =>数据类型,  int char 一样的用

    char name[20];

    char sex;

    float score;//数据成员

};

注:

1.定义结构并不分配空间,它仅仅是个数据类型

2.通常位我们把结构的定义放在include的后面,如果是多文件的话会放在头文件中去(.h)

3.其中{}后面有分号;

4.结构体类型名与它的成员名可以同名。

例:

struct test

{

    int test;

};

5.结构体成员名与其他变量名相同也可以

6.结构体类型名称是"struct 结构体名" ,注意struct 关键字不能省略

7.结构体可以嵌套,即结构体里数据类型也可以是一个结构体类型,但是不能是自身的结构体类型

struct birthday

{

    int year;

    int month;

    int day;

};

struct student

{

    int num;

    char name[20];

    struct birthday  bd;

};

struct student

{

    int num;

    struct student stu2;  X

};

定义结构体变量

1.先定义结构体类型,再定义结构体变量

例:

struct student

{

    int num;

    char name[20];

    float score;

};

struct student      stu1,stu2;  //定义了stu1,stu2  2个变量

2.在定义结构体类型的同时定义结构变量、

例:

struct student

{

    int num;

    char name[20]

}stu1,stu2;

struct student    stu3;

3.直接定义结构体变量

struct    //无名结构体

{

      int num;

      char name[20];

}stu1,stu2;

表示结构体变量成员的一般形式:  结构体变量.成员名

例:

struct data

{

    int year;

    int month;

    int day;

};

struct man

{

    char name[20];

    struct data weding_date;

};

struct man man1,man2;

访问该结构体变量成员;

man2.weding_date.year  一级一级访问。

man2.name

给结构体变量赋值:

1.结构体变量的初始化:定义结构体变量的同时给它赋值

int a[5]={1,2,3,4,5};

struct student  student1={1,"xxxx",'m',90};

形式一:

struct 结构体名

{

    类型 成员名;

    ...

};

struct 结构体名  结构体变量={初始化数据}

例:

struct student

{

    int num;

    char name[20];

    float score;

};

struct student stu1={1,"xxx",90};

形式二:

struct 结构体名

{

    类型 成员名;

    ...

}结构体变量名={初始化数据};

struct student

{

    int num;

    char name[20];

    float score;

}stu1={1,"xxx",90};

初始化的时候是否可以给成员变量的值不赋全?

可以,但不推荐如此

结构体变量的引用规则:

1.除了在定义变量的时候整体访问,引用的时候,不能整体访问,只能通过“变量名.成员名”的方式访问。除了情况2:

#include

//自定义的数据类型

struct student

{

char name[20];

char sex;

int age;

float score;

};

//用自定义的数据类型定义变量stu1并初始化

struct student stu1={"xxx",'m',1,90};

void main()

{

printf("%s %c %d %f\n",stu1);

}

2.

#include

//自定义的数据类型

struct student

{

char name[20];

char sex;

int age;

float score;

};

//用自定义的数据类型定义变量stu1并初始化

void main()

{

struct student stu1={"xxx",'w',1,90},stu2;

stu2=stu1;

stu2={"vvv",'m',2,89}; X

if(stu1==stu2)  X

printf("%s %c %d %.2f\n",stu2.name,stu2.sex,stu2.age,stu2.score);

}

------------------------------------------------------------------------------

int  a;      int* p=&a;          *p<=> a

int a[5];    int (*p)[5]=&a;

struct student    a;    struct student  *p=&a;    *p==a

结构体指针变量:

一个专门用来指向一个结构体变量的指针。

指向一个结构体变量的指针的值是这个结构体变量的首地址。

结构体指针变量定义的一般形式:

struct 结构体名  *p;

通过结构体指针访问该结构体变量的成员,一般形式:

结构体变量.成员名<=>(*结构体指针变量).成员名<=>

结构体指针变量->成员名

例:

结构数组:元素为结构体类型的数组

结构体数组定义的3中方式

形式一:

struct student

{

    int num;

    char sex;

    int age;

};

struct student stu[2];    <=>int a[5]

形式二:

struct student

{

    int num;

    char sex;

    int age;

}stu[30];

形式三:

struct

{

int num;

char sex;

int age;

}stu[30];

结构体数组初始化

struct student

{

    int num;

    char sex;

    int age;

};

struct student stu[]={100,'m',12,102,'w',13};

struct student stu[]={{100,'m',12},{102,'w',13}};

结构体数组的引用:

引用方式:

结构体数组名[下标号].成员名

例: stu[0].num=102;  给第一个学生的学号赋值

结构体作为函数的参数:

1.可以将结构体变量的成员的值作为参数传递给函数处理

2.将整个结构体变量作为函数的参数传递

3.可以将指向一个结构体变量的指针作为参数传递

 

 

上一篇 下一篇

猜你喜欢

热点阅读