设为首页 加入收藏

TOP

C语言基础:006(一)
2016-10-10 11:31:21 】 浏览:1058
Tags:语言基础 006

结构体

结构体类型的定义:

 结构体是由C语言中的基本数据类型构成的、并用一个标识符来命名的各种变量的组合,其中可以使用不同的数据类型。

结构体类型的定义
Struct结构体名
{   类型标识符1     成员名1;
类型标识符2     成员名2;
……
类型标识符n     成员名n;
};
Struct结构体名——结构体类型名
 

关于结构体类型的说明:

  (1)“struct 结构体名”是一个类型名,它和int、float等作用一样可以用来定义变量。
(2)结构体名是结构体的标识符不是变量名,也不是类型名。
(3)构成结构体的每一个类型变量称为结构体成员,它像数组的元素一样,单数组中元素以下标来访问,而结构体是按结构体变量名来访问成员的。
(4)结构体中的各成员既可以属于不同的类型,也可以属于相同的类型。
(5)成员也可以是一个结构体类型,如:
Struct date
{
Int month;
Int day;
Int year;
};
Struct person
{
Float num;
Char name[20];
Char sex;
Int age;
Struct date birthday;
Char address[10];
};
  

结构体类型变量的定义:

   1.先定义结构体类型,再定义结构体变量
形式:
Struct 结构体名
{类型标识符1 成员名1;
 类型标识符2 成员名2;
 ……
 类型标识符n 成员名n;
};
Struct 结构体名 变量名表;
例如:
Struct student
{char name[20];
 Char sex;
 Int age;
 Float score;
};
Struct student stu1,stu2;

2.在定义结构体类型的同时定义变量
形式:
Struct 结构体名
{
类型标识符1  成员名1;
类型标识符2  成员名2;
……
类型标识符n  成员名n;
}变量名表;
例如:
Struct student
{
Char name[20];
Char sex;
Int age;
Float score;
}stu1,stu2;

3.用匿名形式直接定义结构体类型变量
形式:
Struct
{
类型标识符1  成员名1;
类型标识符2  成员名2;
……
类型标识符n  成员名n;
}变量名表;
例如:
Struct
{
Char naem[20];
Char sex;
Int age;
Float score;
}stu1,stu2;
   

结构体变量的使用:

    结构体是一种新的数据类型,因此结构体变量也可以像其它类型的变量一样赋值、运算,不同的是结构体变量以成员作为基本变量。
结构体成员的表示方式为:结构体变量名.成员名
其中的圆点运算符称为成员运算符,它的运算级别最高。
如果将“结构体变量名.成员名”看成一个整体,则这个整体的数据类型与结构体中该成员的数据类型相同,这样就可以像前面所讲的变量那样使用,但应遵循以下规则:
(1)不能将一个结构体变量作为一个整体进行输入和输出,而只能对结构体变量中的各个成员分别进行输入和输出。
Struct date
{
Int month;
Int day;
Itn year;
}day;
Scanf(“%d%d%d”,day);(错误)
Scanf(“%d%d%d”,&day.year,&day.month,&day.day);(正确)
Printf(“%d%d%d”,day);(错误)
Printf(“%d%d%d”,day.year,day.month,day.day);(正确)
(2)如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级地找到最底的一级的成员,只能对最底级的成员进行赋值或存取运算。
Struct date
{
Int month;
Int day;
Int year;
};

Struct student
{
Long num;
Char naem[20];
Char sex;
Int age;
Struct date birthday;
Char depart[10];
}stu1;

如:stu1.birthday.year=2004;
Stu1.birthday.month=12;

(3)对结构体变量的成员可以像同类型普通变量一样进行各种运算。
    

结构体变量的初始化与存储:

     1.结构体变量的初始化:在定义结构体变量的同时给它赋以初值。
Struct student
{
Char name[20];
Char sex;
Int age;
Float score;
}stu1,stu2={“wangwu”,’m’,20,88.5};

2.结构体变量所占内存的字节数
·struct 类型用内存字节数=?
·是所有成员变量的内存总和吗?
用运算符sizeof获得结构体大小
Sizeof(变量或表达式)
Sizeof(类型)

Typedef struct sample
{
Char m1;
Int m2;
Char m3;
}SAMPLE;
Printf(“%d\n”,sizeof(struct sample));
Printf(“%d\n”,sizeof(SAMPLE));

并非所有成员变量的内存总和

事实上,所有数据类型在内存中都是从偶数地址开始存放的且结构所占的实际空间一般是按照机器字长对齐的不同编译器、平台,对齐方式会有变化
结构体变量的成员存储对齐规则是与机器相关的
具有特定数据类型的数据项大小也是与机器相关的
所以一个结构体在内存中的存储格式也是与机器相关的

3.结构体变量存储分配示意图
     

\


结构体类型数组

      1、结构体数组的定义
结构体数组就是具有相同结构体类型的变量集合。
Struct 结构体名
{
类型标识符1  成员名1;
类型标识符2  成员名2;
……
类型标识符n  成员名n;
}数组名[整型常量表达式];

加入要定义一个班级100个同学的学号、姓名、性别、年龄,可以定义成一个结构体数组。如下所示:
Struct{
Long num;
Char name[20];
Char sex;
Int age;
}stu[100];
      

       2 结构体数组的初始化
一般形式是在定义的数组后面加上={初始值表列};
Struct student
{
Long num;
Char name[20];
Char sex;
Int age;
Float score;
Char add[5];
}stu[3]={
{101,”WGJ”,’M’,28,88.5,”CS”}
{102,”DYH”,’F’,26,88.0,”CS”}
{103,”DYC”,’M’,24,78.5,”CS”}
};
       

\


        结构体数组的使用:
结构体数组成员的访问十一数组元素为结构体变量的,其形式为:结构体数组元素名.成员名
如:stu[2].age
候选人得票的统计。设有三个候选人,每
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇自守数算法:C语言实现 下一篇C语言基础:002

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目