zoukankan      html  css  js  c++  java
  • [C]struct结构化数据的一些要点

    1.用typedef声明一个短语代替冗长的struct成员声明

    int main(void)
    {
    
        typedef struct Hores Hores;
        struct Hores
        {
            int age;
            int height;
            char name[20];
            char father[20];
            char mother[20];
        };
    
        Hores groups[3];
    }

    2.成员之间的复制是按值传递的,并不是按引用传递

    #include <stdio.h>
    #include <string.h>
    #include <stdarg.h>
    
    
    
    int main(void)
    {
    
        typedef struct Hores Hores;
        struct Hores
        {
            int age;
            int height;
            char name[20];
            char father[20];
            char mother[20];
        };
    
        Hores groups[3];
    
        strcpy(groups[0].name, "charleed");
    
        groups[1] = groups[0];
    
    
        printf("%d
    ", sizeof(groups));
    
        printf("%s
    ", groups[0].name);
        printf("%s
    ", groups[1].name);
        strcpy(groups[1].name, "alex");
        printf("%s
    ", groups[0].name);
        printf("%s
    ", groups[1].name);
    
        return 0;
    }

    输出:

    204

    charleed

    charleed

    charleed

    alex

    3.访问结构成员有两种运算符:

       一个是“点运算符”,点运算符的左操作数一般是一个左值(也可以不是左值,但值必须是一个结构类型,参考左值一文的示例.5,或《C语言核心技术》第5章:结构和联合的成员);

       另一个是“箭头运算符”,箭头运算符的左操作数必须是一个指针;

     4.结构指针访问成员属性语法

    printf("The name is %s
    ", (*phorse).name);

    为什么不是

    printf("The name is %s
    ", (*phorse.name));

    因为成员选择运算符(句点)的优先级高于取消引用指针运算符*。这个操作还有另一种方法,更容易理解。将上面的语句改写为:

    printf("The name is %s
    ", phorse->name);

     5.结构成员必须都是完整类型,例如下面这个例子,如果成员是一个数组,而它不指定长度,就无法通过编译:

    struct frame_1 {
        char name[];
    };

    不过有一个例外,就是C99允许:如果结构包含多个成员,那么最后一个成员允许为不完整类型的:

    struct frame_1 {
        int index;
        char name[];
    }

    以上声明是合法的;

    6.结构的成员可以包含一个还没有经过声明的结构指针,这种未经显式声明的结构指针被归类为不完整类型:

    struct frame_1 {
        struct frame_2 *ptr_frame_2;
    } item_1;

    以上示例struct frame_2是一个未被声明的结构,它在这里被称为不完整类型;

  • 相关阅读:
    基础调试命令
    mui 拨打电话
    vue a href="tel" 拨打电话
    vue数据已渲染成 但还是报错 变量 undefined
    表格头部与左侧内容随滚动条位置改变而改变(基于jQuery)
    element popover 不显示/不隐藏问题解决方法
    fatal: The remote end hung up unexpectedly解决办法
    mui.fire 目标页无法监听到 触发事件
    多个定时器任务
    vue router 传参 获取不到query,params
  • 原文地址:https://www.cnblogs.com/yiyide266/p/9444124.html
Copyright © 2011-2022 走看看