zoukankan      html  css  js  c++  java
  • C[8] 结构体struct

    C[8] 结构体struct

    结构体是由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员” ,其描述了一块内存区间的大小及解释意义 。

    1、定义结构体

    C语言提供了关键字struct来标识所定义的结构体类型。

    struct tag { 	//tag 是结构体标签。
        member-list     	//member-list 是标准的变量定义,比如 int i; 或者 float f,或者其他有效的变量定义。
        member-list 
        member-list  
        ...
    } variable-list ;   //variable-list 结构变量,定义在结构的末尾,最后一个分号之前,可以指定一个或多个结构变量.
    

    示例:

    //1、结构体中,tag 和 variable-list 至少要出现1个,示例:
    //1.1 没有tag标签的结构体, 
    struct {
        int a1;   //整型
        char a2;   //字符型
        double a3;   //双精度
    } test;   //结构体变量
    
    //1.2 没有结构体变量的结构体,
    struct Ttest{
        int a1;
        char a2;
        double a3;
    };
    struct Ttest t1, t2[5], *t3;    //使用用Test 标签的结构体,声明了变量 t1、t2、t3
    
    //2、结构体包含
    struct Ttest2{
        char string[50];
        struct Ttest1 a;   //此结构体的声明包含了其他的结构体
    }; 
    
    struct Ttest3{
        char string[50];
        struct Ttest3 *N1;   //此结构体的声明包含了指向自己类型的指针
    };
    
    //如果两个结构体互相包含,则需要对其中一个结构体进行不完整声明,如下所示:
    struct B;     //对结构体B进行不完整声明 
    struct A{
        struct B *p;   //结构体A中包含指向结构体B的指针
        //其他成员
    }; 
    struct B{
        struct A *p;  //结构体B中包含指向结构体A的指针,在A声明完后,B也随之进行声明
        //其他成员
    };
    

    2、结构体变量的初始化、成员访问、函数访问、结构指针

    #include <stdio.h>
    #include <string.h>
    //滔Roy  2021.11.05
    struct Ttest{
        int a1;
        char a2[100];   //定义大小 char a2[100];
        double a3;
    };
    
    struct Ttest1{
        int a1;
        char a2[100];
        double a3;
    }test3={150,"Hello TaoRoy3!",45.67} ;
    
    void printTest( struct Ttest test );   //函数声明
    void printTestP( struct Ttest *test );  //函数声明 指针参数
    int main( )
    {
       struct Ttest test1;        /* 声明 test1,类型为 Ttest */
       struct Ttest test2;        /* 声明 test2,类型为 Ttest */
       struct Ttest test4;        /* 声明 test4,类型为 Ttest */   //测试结构作为函数参数的输出
       struct Ttest test5;        /* 声明 test5,类型为 Ttest */   //测试结构作为函数指针参数的输出
    
       /* test1 详述 */
       test1.a1=100;
       strcpy( test1.a2, "Hello TaoRoy1!");   //不能这样写: test1.a2="Hello TaoRoy1!";
       test1.a3=99.99;
    
       /* test2 详述 */
       test2.a1=50;
       strcpy( test2.a2, "Hello TaoRoy2!");
       test2.a3=12.34;
    
       /* 输出 test1 信息 */
       printf( "test1.a1 : %d\n", test1.a1);
       printf( "test1.a2 : %s\n", test1.a2);
       printf( "test1.a3 : %4.2f\n", test1.a3);
    
       /* 输出 test2 信息 */
       printf( "test2.a1 : %d\n", test2.a1);
       printf( "test2.a2 : %s\n", test2.a2);
       printf( "test2.a3 : %4.2f\n", test2.a3);
    
       /* 输出 test3 信息 */
       printf( "test3.a1 : %d\n", test3.a1);
       printf( "test3.a2 : %s\n", test3.a2);
       printf( "test3.a3 : %4.2f\n", test3.a3);
    
       /* test4 详述 */
       test4.a1=44;
       strcpy( test4.a2, "Hello TaoRoy4!");
       test4.a3=44.39;
    
       printTest(test4);  /* 结构作为函数参数的输出 test4 信息 */
    
       /* test5 详述 */
       test5.a1=55;
       strcpy( test5.a2, "Hello TaoRoy5!");
       test5.a3=55.55;
    
       printTestP(&test5); //使用& 运算符放在结构名称的前面,查找结构变量的地址
    
       return 0;
    }
    
    void printTest( struct Ttest test )
    {
       printf( "test.a1 : %d\n", test.a1);
       printf( "test.a2 : %s\n", test.a2);
       printf( "test.a3 : %4.2f\n", test.a3);
    }
    
    void printTestP( struct Ttest *test )
    {
       printf( "test->a1 : %d\n", test->a1);   //结构的指针访问结构的成员,必须使用 -> 运算符
       printf( "test->a2 : %s\n", test->a2);
       printf( "test->a3 : %4.2f\n", test->a3);
    }
    

    创建时间:2021.11.05  更新时间:

  • 相关阅读:
    TFS 2015(Visual Studio Team Foundation Server)的下载和安装
    又回来了
    java.net.SocketException:Too many open files 解决方案
    Java 正则判断一个字符串中是否包含中文
    zabbix 启动报错 cannot set resource limit: [13] Permission denied
    MySQL 查询某个数据库中所有包含数据记录的表名
    MySQL 判断数据库和数据表是否存在
    Java 实现 bash命令
    Java 实现 ssh命令 登录主机执行shell命令
    Java 实现 telnet命令 验证主机端口的连通性
  • 原文地址:https://www.cnblogs.com/guorongtao/p/15513308.html
Copyright © 2011-2022 走看看