美文网首页每天一点C语言程序员
C语言结构体的全面应用

C语言结构体的全面应用

作者: 红木娄 | 来源:发表于2017-04-27 10:38 被阅读183次

    本文为C语言结构的应用总结,C语言没有类的概念,但可以通过结构体构建一个类似类的操作概念。下文是使用的场景代码,由于水平有限,错误之处请各位大神指出。在此抛砖引玉,希望做嵌入式的的人能提供更多的应用的典型案例。

    #include#include/*结构体定义 */

    //只有结构类型的定义

    struct stuff

    {

                char job[20];

                int  age;

                float height;

    };

    //含有结构体类型的结构体变量初始化定义

    struct stuff1

    {

             char job[20];

              int  age;

              float height;

    }Hu;

    //struct stuff1  Hu //就相当于这样子

    // 结构体不能再用来定义同类型的结构体变量,一锤子买卖;

    struct

    {

         char job[20];

         int  age;

        float height;

    }Hu1;//这种类型的结构体变量只能有这么一个,不能去定义其他的

    /*结构体别名声明 */

    typedef struct Stu

    {

            char job[20];

             int  age;

             float height;

    }Stuff,*PtrStuff;

    Stuff      Sam;//等于 struct Stu Sam;

    PtrStuff  pSam;//等于 struct Stu *Sam;

    /*结构体与其他类型 */

    typedef struct arraychange

    {

                int cnt;

               char pc[0];

    }arraychange;//pc数组只能放在最后,不能调换位置;柔性数组,少用;

    struct check

    {

            union

            {

                  char a;

             };

             int i;

    }CheckSystem; //系统内存大小端测试,结构体与联合体结合

    struct structureA

    {

             struct structureB

            {

                   int c;

              }b;  //必须要有实体才能够在后面使用struct structureB bb;

            struct structureB bb;

    }a;//结构体中含有结构体;

    //函数可以用结构体元素,结构体,结构体指针做参数;用元素与普通没什么区别,用结构体则拷贝副本,指针是唯一的;函数可以返回结构体,使用指针的效率高

    void func1(int par);        //结构体元素

    Stuff func2(Stuff par);      //结构体,返回结构体

    void func3(PtrStuff par); //结构体指针

    void print(Stuff par);

    //结构体含有函数指针做元素,这样就可以实现类似面向对象的类封装

    int fun1(int age,int weight);

    void fun2(int age,int weight);

    struct Fun

    {

                int age;

                int weight;

                int (*pfun1)(int age,int weight);  //函数还有一个int返回值,两个int参数

               void (*pfun2)(int age,int weight);  //函数没有返回值,两个int参数

    };

    int main(void)

    {

              /*结构体作为函数参数 */

              Stuff    test,tmptest;

               PtrStuff  ptest=&test;

              /*结构体含有函数指针*/

               struct Fun myfun={10,45,fun1,fun2};

               struct Fun *ptrmyfun=&myfun;

              int age=22,weight=60,temp=0;

               /*结构体作为函数参数 */

               strcpy(test.job,"manager");

                test.age=25;

               test.height=1.65;

              func1(test.age);

              tmptest=func2(test);

              print(tmptest);

              func3(ptest);

               print(test);

             /*结构体含有函数指针*/

              temp=myfun.pfun1(age,weight); //成员调用函数

              printf("temp %d\n",temp);

                myfun.pfun2(age,weight);  //成员调用函数

              myfun.age=80;

               myfun.weight=65;

                temp=ptrmyfun->pfun1(myfun.age,myfun.weight); //指针调用函数

             printf("temp %d\n",temp);

             ptrmyfun->pfun2(myfun.age,myfun.weight);    //指针调用函数

            return 0;

    }

    void print(Stuff par)

    {

    printf("your job is:%s\n",par.job);

    printf("your age is:%d\n",par.age);

    printf("your height is:%f\n",par.height);

    }

    void func1(int par)

    {

    printf("your age is:%d\n",par);

    }

    Stuff func2(Stuff par)

    {

    strcpy(par.job,"Engineer");

    par.age=30;

    par.height=1.80;

    return par;

    }

    void func3(PtrStuff par)

    {

    strcpy(par->job,"Programmer");

    par->age=19;

    par->height=170;

    }

    int fun1(int age,int weight)

    {

    int temp=0;

    temp=age+weight;

    return temp;

    }

    void fun2(int age,int weight)

    {

    printf("your age is:%d\n",age);

    printf("your weight is:%d\n",weight);

    }

    相关文章

      网友评论

      • 刘玉文:现在看的不是太懂,希望工作以后回过头来看的时候能像看说明书一样。
        红木娄: @刘玉文 一定会的

      本文标题:C语言结构体的全面应用

      本文链接:https://www.haomeiwen.com/subject/hsegzttx.html