c语言入门:C语言入门之结构(1)



  在实际问题中组数据往往具有区别数据类型例如在学生登记表中姓名应为型;学号可为整型或型;年龄应为整型;性别应为型;成绩可为整型或实型显然不能用来存放这组数据中各元素类型和长度都必须以便于编译系统处理为了解决这个问题C语言中给出了另种构造数据类型——“结构”它相当于其它高级语言中记录

  “结构”是种构造类型它是由若干“成员”组成个成员可以是个基本数据类型或者又是个构造类型结构既是种“构造”而成数据类型那么在介绍说明和使用的前必须先定义它也就是构造它如同在介绍说明和的前要先定义

  结构定义

  定义个结构般形式为:

struct结构名
{
 成员表列
};

  成员表由若干个成员组成每个成员都是该结构个组成部分对每个成员也必须作类型介绍说明其形式为:

  类型介绍说明符成员名;

  成员名命名应符合标识符书写规定例如:

structstu
{
 num;
 charname[20];
 charsex;
 floatscore;
};

  在这个结构定义中结构名为stu该结构由4个成员组成个成员为num整型变量;第 2个成员为name;第 3个成员为sex变量;第 4个成员为score实型变量应注意在括号后分号是不可少结构定义的后即可进行变量介绍说明凡介绍说明为结构stu变量都由上述4个成员组成由此可见结构是种复杂数据类型是数目固定类型区别若干有序变量集合

  结构类型变量介绍说明

  介绍说明结构变量有以下 3种思路方法以上面定义stu为例来加以介绍说明

  1.先定义结构再介绍说明结构变量如:

structstu
{
 num;
 charname[20];
 charsex;
 floatscore;
};
structstuboy1,boy2;

  介绍说明了两个变量boy1和boy2为stu结构类型也可以用宏定义使个符号常量来表示个结构类型例如:

#STUstructstu
STU
{
 num;
 charname[20];
 charsex;
 floatscore;
};
STUboy1,boy2;

  2.在定义结构类型同时介绍说明结构变量例如:

structstu
{
 num;
 charname[20];
 charsex;
 floatscore;
}boy1,boy2;

  3.直接介绍说明结构变量例如:

struct
{
 num;
 charname[20];
 charsex;
 floatscore;
}boy1,boy2;

  第 3种思路方法和第 2种思路方法区别在于第 3种思路方法中省去了结构名而直接给出结构变量介绍说明了boy1,boy2变量为stu类型后即可向这两个变量中各个成员赋值在上述stu结构定义中所有成员都是基本数据类型或类型成员也可以又是个结构即构成了嵌套结构例如:

structdate{
 month;
 day;
 year;
}
struct{
 num;
 charname[20];
 charsex;
 structdatebirthday;
 floatscore;
}boy1,boy2;

  首先定义个结构date由month(月)、day(日)、year(年) 3个成员组成在定义并介绍说明变量boy1和boy2时其中成员birthday被介绍说明为data结构类型成员名可和中其它变量同名互不干扰结构变量成员表示思路方法在中使用结构变量时往往不把它作为个整体来使用

  在ANSIC中除了允许具有相同类型结构变量相互赋值以外般对结构变量使用包括赋值、输入、输出、运算等都是通过结构变量成员来实现

  表示结构变量成员般形式是:结构变量名.成员名例如:boy1.num即第个人学号 boy2.sex即第 2个人性别如果成员本身又是个结构则必须逐级找到最低级成员才能使用例如:boy1.birthday.month即第个人出生月份成员可以在中单独使用和普通变量完全相同




  结构变量赋值

  前面已经介绍结构变量赋值就是给各成员赋值可用输入语句或赋值语句来完成

  [例7.1]给结构变量赋值并输出其值

{
 structstu
 {
  num;
  char*name;
  charsex;
  floatscore;
 }boy1,boy2;
 boy1.num=102;
 boy1.name="Zhangping";
 prf("inputsexandscore\\n");
 scanf("%c%f",&boy1.sex,&boy1.score);
 boy2=boy1;


 prf("Number=%d\\nName=%s\\n",boy2.num,boy2.name);
 prf("Sex=%c\\nScore=%f\\n",boy2.sex,boy2.score);
}
structstu
{
 num;
 char*name;
 charsex;
 floatscore;
}boy1,boy2;
boy1.num=102;
boy1.name="Zhangping";
prf("inputsexandscore\\n");
scanf("%c%f",&boy1.sex,&boy1.score);
boy2=boy1;
prf("Number=%d\\nName=%s\\n",boy2.num,boy2.name);
prf("Sex=%c\\nScore=%f\\n",boy2.sex,boy2.score);

  本中用赋值语句给num和name两个成员赋值name是串指针变量用scanf动态地输入sex和score成员值然后把boy1所有成员值整体赋予boy2最后分别输出boy2各个成员值本例表示了结构变量赋值、输入和输出思路方法

  结构变量

  如果结构变量是全局变量或为静态变量则可对它作化赋值对局部或自动结构变量不能作化赋值

  [例7.2]外部结构变量

structstu/*定义结构*/
{
 num;
 char*n
ame;
 charsex;
 floatscore;
}boy2,boy1={102,"Zhangping",’M’,78.5};

{
 boy2=boy1;
 prf("Number=%d\\nName=%s\\n",boy2.num,boy2.name);
 prf("Sex=%c\\nScore=%f\\n",boy2.sex,boy2.score);
}
structstu
{
 num;
 char*name;
 charsex;
 floatscore;
}boy2,boy1={102,"Zhangping",’M’,78.5};

{
 boy2=boy1;
 ……
}

  本例中boy2,boy1均被定义为外部结构变量并对boy1作了化赋值把boy1值整体赋予boy2然后用两个prf语句输出boy2各成员

  [例7.3]静态结构变量


{
 structstu/*定义静态结构变量*/
 {
  num;
  char*name;
  charsex;
  floatscore;
 }boy2,boy1={102,"Zhangping",’M’,78.5};
 boy2=boy1;
 prf("Number=%d\\nName=%s\\n",boy2.num,boy2.name);
 prf("Sex=%c\\nScore=%f\\n",boy2.sex,boy2.score);
}
structstu
{
 num;
 char*name;
 charsex;
 floatscore;
}boy2,boy1={102,"Zhangping",’M’,78.5};

  本例是把boy1boy2都定义为静态局部结构变量同样可以作化赋值
Tags:  单片机c语言入门 c语言入门经典 c语言入门教程 c语言入门

延伸阅读

最新评论

发表评论