结构体数据类型详解

1.结构体类型的定义

struct 结构体类型名
{
成员说明列表(类型符 成员名;)
};

例:struct student
       {
     int number;//整型
int age;
char sex;//字符型
float score;//浮点型
char addr[40];//数组类型
       };
       上例说明结构体类型struct student 有6个成员,分别命名为num,name,sex,age,score和addr。这6个成员分别表示学生的学号、姓名、性别、年龄、成绩和家庭住址,显然它们的类型是不同的。
注:结构体类型可以嵌套定义,既一个结构体类型中的某些成员又是其他结构体类型。但是这种嵌套不能包含自身,既不能由自己定义自己。

2.结构体类型变量

2.1结构体类型变量的定义

    要定义一个结构体类型的变量,可以采取以下3种方法。
    1.先定义结构体类型,再定义结构体变量

    如上面已经定义了一个结构体类型 struct student,可以用它来定义变量。例如:
       struct student stud1,stud2;
    定义stud1和stud2为 struct student 类型变量, 即它们是具有 struct student 类型的结构体变量。

    为了使用方便,人们通常用一个符号常量代表一个结构体类型。在程序开头,加上命令:
     #define STU_TYPE struct student
    这样在程序中,STU_TYPE与struct student完全等效。
例:   STU_TYPE
       {
     int number;//整型
int age;
char sex;//字符型
float score;//浮点型
char addr[40];//数组类型
       };
     然后就可以直接用STU_TYPE定义变量。例如:STU_TYPE stud1,stud2;
     
     2.在定义结构体类型的同时定义结构体变量

   这种定义方法的一般形式为:
struct 结构体类型名
{
成员说明列表(类型符 成员名;)
}变量名列表;

例:   struct student
       {
     int number;//整型
int age;
char sex;//字符型
float score;//浮点型
char addr[40];//数组类型
       }stud1,stud2;
     它的作用与前面定义的相同。即定义了两个struct student 类型的变量stud1和stud2。
     
     3.直接定义结构体类型变量

     这种定义方法的一般形式为:
struct 
{
成员说明列表(类型符 成员名;)
}变量名列表;

         注意:即在结构体定义时不出现结构体类型名,这种形式虽然简单,但不能在需要时,使用所定义的结构体类型。

2.2结构体类型变量的使用

    引用一个结构体变量有两种方式:通过结构体变量名和通过指向结构体的指针变量。与之对应的,引用结构体成员的标记形式有两种,分别用运算符“.”和“->”来标记。
    (1)由结构体变量名引用其成员的标记形式为: 

结构体变量名.成员名    
        例如:stud.num = 20312;
 
    (2)由指向结构体的指针变量引用结构体成员的标记形式为:

指针变量名->成员名
例如:struct node
      {
  float x,y;
       }p,u,*pt;

          pt->x=23.7,pt->y=3.4
(3)初始化结构体
例如:struct student jack={
.name = "jack",
.num = 2012013822;
.age = 18;
.sex = "男";
   };

1.结构体与函数实例

        例:有一个结构体变量stu,内含学生学号、姓名和3门课的成绩。要求在main函数中给变量赋值,在另一个函数print中将它们打印输出。


<span style="font-size:18px;">struct student
{
	long num;
	char name[20];
	float score[3];
}

void main()
{
	void print(struct student *);
	struct student stu;
	stu.num = 3021210;
	strcpy(stu.name,"LI Dong");
	stu.score[0] = 67.5;
	stu.score[1] = 89;
	stu.score[3] = 78.6;
	print(&stu);
}

void print(struct student *p)
{
	printf("%ld\n%s\n%f\n%f\n%f\n",p->num,p->name,p->score[0],p->score[1],p->score[2]);
	printf("\n");
}</span>

程序运行结果如下:
3021210
Li Dong
67.500000
89.000000
78.599998



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值