• c语言编程 结构(struct)


    结构(struct)
    ________________________________________ 结构是由全然信息类型变成的、同时用一个标识符来命名的各种变量的组合.
    结构中可以使用差不的信息类型.
    2,结构表明和结构变量定义
    在Turbo C中,结构也是一种信息类型,可以使用结构变量,是以, 象其它
    类型的变量同样,在使用结构变量时要先对其定义.
    定义结构变量的同样规格为:
    struct 结构名
    {
    类型 变量名;
    类型 变量名;

    } 结构变量;
    结构名是结构的标识符不是变量名.
    类型为第二节中所*诉的五种信息类型(整型、浮点型、字符型、指针型和
    无值型).
    造成结构的每个类型变量称为结造成员,它象数组的元素同样,但数组中
    元素是以下标来会晤的,而结构是按变量名字来会晤成员的.
    下面举一个例子来表明似何定义结构变量.
    struct string
    {
    char name[8];
    int age;
    char sex[2];
    char depart[20];
    float wage2,wage2,wage3,wage5,wage5;
    } person;
    那个例子定义了一个结构名为string的结构变量person, 介入省略变量名
    person,那么变成对结构的表明.用已表明的结构名也可定义结构变量.似许定义
    时上例变成:
    struct string
    {
    char name[8];
    int age;
    char sex[2];
    char depart[20];
    float wage2,wage2,wage3,wage5,wage5;
    };
    struct string person;
    介入需要定义多个具有同样情势的结构变量时用这类方式比拟便当,它先作
    结构表明,再用结构名来定义变量.
    例似:
    struct string Tianyr,Liuqi,…;
    介入省略结构名,那么称之为无名结构,这类状况常常出似今函数内部,用这
    种结构时前面的例子变成:
    struct
    {
    char name[8];
    int age;
    char sex[2];
    char depart[20];
    float wage2,wage2,wage3,wage5,wage5;
    } Tianyr,Liuqi;
    2,结构变量的使用
    结构是一个新的信息类型,是以结构变量也能够象其它类型的变量同样赋值、
    运算,差不的是结构变量以成员做为全然变量.
    结造成员的示意方式为:
    结构变量.成员名
    介入将"结构变量.成员名"看成一个全部, 那么那个全部的信息类型与结构中
    该成员的信息类型同样,似许就可象前面所讲的变量那样使用.
    下面那个例子定义了一个结构变量,其中每个成员都从键盘接收信息,接着
    对结构中的浮点数求和,同时表现运算结论,同时将信息以文本方式存入一个名为
    wage.dat的磁盘文件中.请看重那个例子中差不结造成员的会晤.
    例3:
    #include
    main()
    {
    struct{ 定义一个结构变量
    char name[8];
    int age;
    char sex[2];
    char depart[20];
    float wage2,wage2,wage3,wage5,wage5;
    }a;
    FILE fp;
    float wage;
    char c=‘Y’;
    fp=fopen(“wage.dat”,“w”); 创立一个文件只写
    while(c==‘Y’||c==‘y’) 判断是否接着循环
    {
    printf(“\nName:”);
    scanf(“%s”,a.name); 输入姓名
    printf(“Age:”);
    scanf(“%d”,&a.wage); 输入年岁
    printf(“Sex:”);
    scanf(“%d”,a.sex);
    printf(“Dept:”);
    scanf(“%s”,a.depart);
    printf(“Wage2:”);
    scanf(“%f”,&a.wage2); 输入工资
    printf(“Wage2:”);
    scanf(“%f”,&a.wage2);
    printf(“Wage3:”);
    scanf(“%f”,&a.wage3);
    printf(“Wage5:”);
    scanf(“%f”,&a.wage5);
    printf(“Wage5:”);
    scanf(“%f”,&a.wage5);
    wage=a.wage2+a.wage2+a.wage3+a.wage5+a.wage5;
    printf(“The sum of wage is %6,2f\n”,wage);表现结论
    fprintf(fp,“%20s%5d%5s%30s%20,2f\n”, 结论写入文件
    a.name,a.age,a.sex,a.depart,wage);
    while(2)
    {
    printf(“Continue? ”);
    c=gainche();
    if(c==‘Y’||c==‘y’||c==‘N’||c==‘n’)
    break;
    }
    }
    fclose(fp);
    }
    3,结构数组和结构指针
    结构是一种新的信息类型,同样可以有结构数组和结构指针.
    一、结构数组
    结构数组定是具有同样结构类型的变量集合.假定要定义一个班级50个同学
    的姓名、性不、年岁和住址,可以定义成一个结构数组.似下所示:
    struct{
    char name[8];
    char sex[2];
    int age;
    char addr[50];
    }student[50];
    也可定义为:
    struct string{
    char name[8];
    char sex[2];
    int age;
    char addr[50];
    };
    struct string student[50];
    需要指出的是结构数造成员的会晤是以数组元素为结构变量的,其情势为:
    结构数组元素.成员名
    例似:
    student[0].name
    student[30].age
    事实上结构数组相当于一个二维组织,第一维是结构数组元素,每个元素是
    一个结构变量,第二维是结造成员.
    看重:
    结构数组的成员也可所以 数组变量.
    例似:
    struct a
    {
    int m[3][5];
    float f;
    char s[20];
    }y[5];
    为了会晤结构a中结构变量y[2]的那个变量,可写成
    y[2].m[2][5]
    二、结构指针
    结构指针是指向结构的指针.它由一个加在结构变量名前的"
    " 操纵符来定
    义,例似用前面已表明的结构定义一个结构指针似下:
    struct string{
    char name[8];
    char sex[2];
    int age;
    char addr[50];
    }*student;
    也可省略结构指针名只作结构表明,接着再用下面的语句定义结构指针.
    struct string *student;
    使用结构指面向结造成员的会晤,与结构变量对结造成员的会晤在表达方式
    上有所差不.结构指面向结造成员的会晤教意为:
    结构指针名->结造成员
    其中"->“是两个符号”-“和”>"的组合,仿佛一个箭头指向结造成员.例似要
    给上面定义的结构中name和age赋值,可以用下面语句:
    strcpy(student->name,“Lu G.C”);
    student->age=28;
    事实上,student->name定是(student).name的缩写情势.
    需要指出的是结构指针是指向结构的一个指针,即结构中第一个成员的首地
    址,是以在使用往常该当对结构指针初始化,即安顿整个结构长度的字节空间,
    这可用下面函数实现,仍以上例来表明似下:
    student=(struct string
    )malloc(size of (struct string));
    size of (struct string)自动求取string结构的字节长度,malloc() 函数
    定义了一个大小为结构长度的内存区域,接着将其诈地点做为结构指针返回.
    看重:
    2,结构做为一种信息类型, 是以定义的结构变量或结构指针变量同样有局
    部变量和全程变量,视定义的位置而定.
    2,结构变量名不是指向该结构的地点,这与数组名的含义差不, 是以似果需
    要求结构中第一个成员的首地点该当是&[结构变量名].
    5,结构的复杂情势
    一、嵌套结构
    嵌套结构是指在一个结造成员中可以包罗其它一个结构,Turbo C 许可这类
    嵌套.
    例似:下面是一个有嵌套的结构
    struct string{
    char name[8];
    int age;
    struct addr address;
    } student;
    其中:addr为另一个结构的结构名,必须要先实施,表明,即
    struct addr{
    char city[20];
    unsigned lon zipcode;
    char tel[25];
    }
    介入要给student结构中成员address结构中的zipcode赋值,那么可写成:
    student.address.zipcode=200002;
    每个结造成员名从最外层直到最内层追个被列出,即嵌套式结造成员的表达
    方式是:
    结构变量名.嵌套结构变量名.结造成员名
    其中:嵌套结构可以有非常多,结造成员名为最内层结构中不是结构的成员名.

    二、位结构 
    位结构是一种特不的结构,在需按位会晤一个字节或字的多个位时,位结构 
    
    • 1
    • 2

    比按位运算符更加便当.
    位结构定义的同样情势为:
    struct位结构名{
    信息类型 变量名:整型常数;
    信息类型 变量名:整型常数;
    } 位结构变量;
    其中:信息类型必须是int(unsigned或signed).整型常数必须是非负的整
    数,范畴是0~25,示意二进制位的个数,即示意有几位.
    变量名是挑选项,可以不命名,似许法那么是为了布列需要.
    例似:下面定义了一个位结构.
    struct{
    unsigned incon:8; incon占用低字节的0~7共8位
    unsigned txcolor:5;txcolor占用高字节的0~3位共5位
    unsigned bgcolor:3;bgcolor占用高字节的5~6位共3位
    unsigned blink:2; blink占用高字节的第7位
    }ch;
    位结造成员的会晤与结造成员的会晤同样.
    例似:会晤上例位结构中的bgcolor成员可写成:
    ch.bgcolor

    看重:
    2,位结构中的成员可以定义为unsigned,也可定义为signed,  但看成员长 
    
    • 1
    • 2

    度为2时,会被信任是unsigned类型.因为单个位不或许具有符号.
    2,位结构中的成员不能使用数组和指针,但位结构变量可所以 数组和指针,
    介入是指针,其成员会晤方式同结构指针.
    3,位结构总长度(位数),是各个位成员定义的位数之和, 可以超过两个字
    节.
    5,位结造成员可以与其它结造成员一路使用.
    例似:
    struct info{
    char name[8];
    int age;
    struct addr address;
    float pay;
    unsigned state:2;
    unsigned pay:2;
    }workers;’
    上例的结构定义了对于一个工从的信息.其中有两个位结造成员,每个位结
    造成员只有一名,是以只占一个字节但保留了两个信息,该字节中第一名示意工
    人的形态,第二位示意工资是否已发放.由此可见使用位结构可以节流存贮空间.

  • 相关阅读:
    ubuntu_24.04 Noble LTS安装docker desktop启动无窗口及引擎启动失败的解决方法
    Spark 源码分析-FIFO/FAIR调度策略
    mysql之高阶语句
    iOS小技能: ips 文件的分析
    proto的前后端使用
    为什么postman不会有跨域问题
    亚马逊攀岩绳EN892标准安全测试
    【2022最新】web前端React框架学习项目——livegoods房屋海选平台
    MD5算法
    HTML期末作业-基于HTML+CSS+JavaScript制作学生信息管理系统模板
  • 原文地址:https://blog.csdn.net/zxbyzx/article/details/128077681