C04结构体

来源:互联网 发布:mac rar解压软件免费 编辑:程序博客网 时间:2024/05/30 02:51

一 、 结构体是什么?

1.与C语言中的数组,用法跟其他语言差不多。当一个整体由多个数据构成时,可以用数组来表示这个整体,但是数组有个特点:内部的每一个元素都必须是相同类型的数据。2.通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名、年龄、身高等数据构成,这些数据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型。3.C语言专门提供了一种构造类型来解决上述问题,就是结构体,它允许内部的元素是不同类型的。

二 、 结构体有什么用?

1.更好的管理内存,解决基本数据类型和数组都不好存储的数据

三 、 结构体怎么用?

方法一:先定义结构体类型再定义变量名

struct  student{int  num;  char  name[20];  char  sex;  int  age;  char  addr[30];};struct   student    student1, student2;

有时,可用符号常量代表一个结构体类型 ,如:

#define STUDENT struct studentSTUDENT{int  num;  char  name[20];  char  sex;  int  age;  char  addr[30];};

方法二:在定义类型的同时定义变量

struct  student{int  num;  char  name[20];  char  sex;  int  age;  char  addr[30];} student1, student2;

方法三:直接定义结构类型变量。
其一般形式是:
struct
{
成员表列
} 变量名表列;
- 结构体变量的指针:是该结构体变量所占居的内存段的起始地址,指向该结构体

int main( ){ struct student  {  long int num;  char name[20];  char sex;  };struct student stu_1;struct student *p;p=&stu_1;return 0;} 
  • 引用结构体成员的三种形式:
    1) 结构体变量名 . 成员名
    2) (*p).成员名
    3) p- >成员名
  • 结构体的初始化
 struct  student{long int num;  char name[20];  char sex;  char addr[20];} stu={9801,”Wang hong”,’W’,”2 Linggong Road”};

或者

 struct  student{long int num;  char name[20];  char sex;  char addr[20];};struct Student stu ={9801,”Wang hong”,’W’,”2 Linggong Road”}

四 、 使用结构体要注意什么?

1.  类型与变量是不同概念,不要混淆;2.  结构体中的成员,可以单独使用,其作 用与地位相当于普通变量;3.  成员名可以与程序中的变量名相同,二 者不代表同一对象。4.  成员也可以是一个结构体变量;5. 不能将一个结构体变量作为一个整体进行赋值和输出;只能对其各个成员分别输出6. 只能在定义变量的同时进行初始化赋值,初始化赋值和变量的定义不能分开

五 、 结构体代码举例

  • 例1一般应用
//一个结构体 struct Student {    char *name;     int age; }; struct Student stu;// 访问stu的age成员 stu.age = 27;//两个结构体搭配struct Date {      int year;      int month;       int day; }; struct Student {      char *name;      struct Date birthday; }; struct Student stu; //注意成员变量的访问 stu.birthday.year = 1986; stu.birthday.month = 9; stu.birthday.day = 10;
  • 例2结构体作为函数参数(值传递)
#include <stdio.h>  // 定义一个结构体 struct Student {     int age; }; void test(struct Student stu) {      printf("修改前的形参:%d \n", stu.age);     // 修改实参中的age     stu.age = 10;     printf("修改后的形参:%d \n", stu.age); } int main(int argc, const char * argv[]) {     struct Student stu = {30};     printf("修改前的实参:%d \n", stu.age);     // 调用test函数     test(stu);    printf("修改后的实参:%d \n", stu.age);     return 0; }
  • 例3 利用指向结构体数组的指针计算学生各科的平均成绩
#include <stdio.h>int main(){ struct STUDENT *pt; float  sum[4] = {0.0},average[4] = {0.0}; int   i; char  *name[]={"score of Computer","score of English",                "score of Math","score of Music"}; pt = stu;    /*pt指向结构体数组的第一个元素*/ for (pt=stu; pt<stu+30; pt++) {  sum[0] = sum[0] + pt->scoreComputer;//用->访问成员变量  sum[1] = sum[1] + pt->scoreEnglish;  sum[2] = sum[2] + pt->scoreMath;  sum[3] = sum[3] + pt->scoreMusic;   } for (i=0; i<4; i++) {     average[i] = sum[i]/4;      printf("%20s : %4.2f\n", name[i], *(average+i));//格式输出,平均分保留两位 }return 0;}

六 、 结构体总结

1.不允许对结构体本身递归定义2.结构体内可以包含别的结构体3.定义结构体类型,只是说明了该类型的组成情况,并没有给它分配存储空间,就像系统不为int类型本身分配空间一样。只有当定义属于结构体类型的变量时,系统才会分配存储空间给该变量4.结构体变量占用的内存空间是其成员所占内存之和,而且各成员在内存中按定义的顺序依次排列5.初始化:将各成员的初值,按顺序地放在一对大括号{}中,并用逗号分隔,一一对应赋值6.一般对结构体变量的操作是以成员为单位进行的,引用的一般形式为:结构体变量名.成员名7.如果某个成员也是结构体变量,可以连续使用成员运算符"."访问最低一级成员8.相同类型的结构体变量之间可以进行整体赋值9.将结构体变量作为函数参数进行传递时,其实传递的是全部成员的值,也就是将实参中成员的值一一赋值给对应的形参成员。因此,形参的改变不会影响到实参。10.每个结构体变量都有自己的存储空间和地址,因此指针也可以指向结构体变量11.typedef 的用法 ,功能:定义新类型,即为C语言中已有的数据类型 名定义一个新名字。 定义格式: typedef   标识符1    标识符2
0 0
原创粉丝点击