精华内容
下载资源
问答
  • C语言程序设计教案 章节名称 结构体类型概述结构体类型变量 授课类型 理论 实验 ?理实一体 实训 实习 班级 地点 周次 星期 节次 授课进度 ?符合 超前 滞后 ?符合 超前 滞后 ?符合 超前 滞后 教学目标 知识目标 1....
  • C语言结构体类型的定义和使用(一)

    万次阅读 多人点赞 2019-08-16 16:50:39
    0x00 前言 文章中的文字可能存在语法错误以及标点错误,请谅解; 如果在文章中发现代码错误或其它问题请告知,感谢!...0x01 结构体类型的定义 0x02 结构体类型变量的定义 0x03 结构体类型变量初始化和引用 ...

    0x00 前言

    文章中的文字可能存在语法错误以及标点错误,请谅解;

    如果在文章中发现代码错误或其它问题请告知,感谢!

    0x01 结构体类型的定义

    在实际编程过程中,我们希望把一些关联的数据存放在一起,这样方便我们使用,但是这些数据的类型有时候并不一致,例如报文内容以及该条报文长度,报文内容和长度不属于同一类型,报文应该是类似如char*类型的字符串,报文长度应该是类似如int类型的整数。

    在这里插入图片描述

    因为数组只能存放同一类型的数据,所以不适合用数组来保存这些变量。 但在C语言中,结构体允许将不同类型数据组成组合型的数据结构。此时,我们若想要将类型不一样的关联数据存放在一起,就可以使用结构体。

    声明一个结构体类型的一般形式如下:
    struct 结构体类型名
    {
    成员表列
    };

    其中,成员表列中的每个成员(Member)是该结构体类型所包含的变量或数组,上面所说的报文内容和报文长度可以是一个结构体的成员,它们组合在一起构成成员表列,举例如下:

    struct UDP_Server_Thread_Para
    {
        void *pData;
        int Len;
    };
    

    结构体的类型可以有很多种,结构体类型中的成员由开发者自己定义,并且成员不用初始化。
    另外,一个结构体成员可以属于另一个结构体类型,例如:

     struct TIME
    {
            int date;
            int month;
            int year;
            int hour;
            int min;
            int sec;
    };
    
    struct nmea_msg
    {
        struct TIME utc;
        char gpssta;                                                             
        int longitude;                          
        int latitude;                                                 
        short speed;                       
        short altitude;                   
    };
    

    在这里插入图片描述

    0x02 结构体类型变量的定义

    上节所述的结构体类型本身并不会作为数据而被系统分配内存,如果一个结构体类型定义了变量则系统会分配内存空间,每一个结构体变量的所占内存大小,由结构体类型中的每个成员的总和决定。
    定义结构体变量的方法有三种:
    1.先声明结构体类型,再定义该类型变量:

    一般形式为:
    struct 结构体类型名
    {
    成员表列
    };
    struct 结构体类型名 变量名表列;

    例如:

    struct UDP_Server_Thread_Para
    {
    	void *pData;
    	int Len;
    };
    struct UDP_Server_Thread_Para  UDPThreadPara1,UDPThreadPara2;
    

    为了便于理解,可以把struct UDP_Server_Thread_Para 类型类比于 int类型,UDP_Server_Thread_Para UDPThreadPara1,UDPThreadPara2即int UDPThreadPara1,UDPThreadPara2。

    一个在该定义方式下的程序例子:

    #include<stdio.h>
    
    struct UDP_Server_Thread_Para
    {
        void *pData;
        int len;
    };
    
    int main()
    {
       struct UDP_Server_Thread_Para UDPThreadPara1,UDPThreadPara2;
       
       UDPThreadPara1.pData = "hello";
       UDPThreadPara1.len = 1;
    
       UDPThreadPara2.pData = "world";
       UDPThreadPara2.len = 2;
    
       printf("UDPThreadPara1: %s, len %d\n", (char*)UDPThreadPara1.pData, UDPThreadPara1.len);
    
       printf("UDPThreadPara2: %s, len %d\n", (char*)UDPThreadPara2.pData, UDPThreadPara2.len);
    
       return 0;
    }
    

    运行结果:
    在这里插入图片描述

    2.在声明的同时定义变量:

    一般形式为:
    struct 结构体类型名
    {
    成员表列
    }变量名表列;

    例如:

    struct UDP_Server_Thread_Para
    {
    	void *pData;
    	int Len;
    }UDPThreadPara1,UDPThreadPara2;
    

    声明和定义变量放在一起比较直观,但在比较大的代码工程中,为了使程序结构清晰,会对类型声明和变量定义放在不同的位置。另外,在此方式下,也可以根据需要在函数中新增该结构体类型变量。

    一个在该定义方式下的程序例子:

    #include<stdio.h>
    
    struct UDP_Server_Thread_Para
    {
        void *pData;
        int len;
    }UDPThreadPara1,UDPThreadPara2;
    
    int main()
    {
       UDPThreadPara1.pData = "hello";
       UDPThreadPara1.len = 1;
    
       UDPThreadPara2.pData = "world";
       UDPThreadPara2.len = 2;
    
       struct UDP_Server_Thread_Para UDPThreadPara3;	//新增该结构体类型变量
       UDPThreadPara3.pData = "!!!!";
       UDPThreadPara3.len = 3;
    
       printf("UDPThreadPara1: %s, len %d\n", (char*)UDPThreadPara1.pData, UDPThreadPara1.len);
    
       printf("UDPThreadPara2: %s, len %d\n", (char*)UDPThreadPara2.pData, UDPThreadPara2.len);
    
       printf("UDPThreadPara3: %s, len %d\n", (char*)UDPThreadPara3.pData, UDPThreadPara3.len);
       
       return 0;
    }
    

    运行结果:
    在这里插入图片描述

    3.不指定类型名直接定义结构体类型变量:

    一般形式为:
    struct
    {
    成员表列
    }变量名表列;

    struct
    {
    	void *pData;
    	int Len;
    }UDPThreadPara1,UDPThreadPara2;
    

    这种方式只能够定义一次,不能再以此定义其它变量。

    一个在该定义方式下的程序例子:

    #include<stdio.h>
    
    struct
    {
        void *pData;
        int len;
    }UDPThreadPara1,UDPThreadPara2;
    
    int main()
    {
       UDPThreadPara1.pData = "hello";
       UDPThreadPara1.len = 1;
    
       UDPThreadPara2.pData = "world";
       UDPThreadPara2.len = 2;
    
       printf("UDPThreadPara1: %s, len %d\n", (char*)UDPThreadPara1.pData, UDPThreadPara1.len);
    
       printf("UDPThreadPara2: %s, len %d\n", (char*)UDPThreadPara2.pData, UDPThreadPara2.len);
    
       return 0;
    }
    

    运行结果:
    在这里插入图片描述

    0x03 结构体类型变量初始化和引用

    对于结构体变量的初始化即赋值,可以在定义结构体变量时对其进行成员初始化,例如:

    struct UDP_Server_Thread_Para
    {
        void *pData;
        int Len;
    }UDPThreadPara1={“I LOVE CHINA”,12},UDPThreadPara2={“I AM CHINESE”,12};
    

    也可以引用 结构体变量时赋值,格式如下:
    结构体类型变量名.成员名

    例如:

    struct UDP_Server_Thread_Para
    {
        void *pData;
        int Len;
    }UDPThreadPara1,UDPThreadPara2;
    
    UDPThreadPara1.pData = "I LOVE CHINA";
    UDPThreadPara1.Len = 12;
    
    UDPThreadPara2.pData = "I AM CHINESE";
    UDPThreadPara2.Len = 12;
    

    若结构体成员本身又属于另一个结构体类型,则需要运算符“.”逐级找到最低以及的成员赋值。比如上一小节nmea_msg类型结构体中utc属于TIME类型结构体,假设现在要为speed以及month赋值则:

     struct TIME
    {
            int date;
            int month;
            int year;
            int hour;
            int min;
            int sec;
    };
    struct nmea_msg
    {
        struct TIME utc;
        char gpssta;                                                             
        int longitude;                          
        int latitude;                                                 
        short speed;                       
        short altitude;                   
    } Data;
    
    Data.speed = 50;
    Data.utc.month = 12;
    

    最后,需要注意的是,访问结构体成员需要对齐访问,至于这个概念 ,下篇博文会介绍。

    以上。
    参考文档:
    1.http://c.biancheng.net/cpp/html/88.html
    2.https://www.runoob.com/cprogramming/c-structures.html
    3.https://blog.csdn.net/xiaoyali/article/details/4393486
    4. 谭浩强.C程序设计(第四版)[M].北京:清华大学出版社,2010.

    展开全文
  • 结构体类型

    2014-07-25 08:41:40
    1. 结构体是一种自定义的数据类型,也是用来存储多个数据的大容器,只不过结构体要比数组灵活,它可以存储不同类型的数据 2.结构体定义:struct + 结构体名字{大括号中填写结构体成员,多个结构体成员之间通过分号进行...

    1. 结构体是一种自定义的数据类型,也是用来存储多个数据的大容器,只不过结构体要比数组灵活,它可以存储不同类型的数据

    2.结构体定义:struct + 结构体名字{大括号中填写结构体成员,多个结构体成员之间通过分号进行间隔} +;(分号必不可少)

    如:定义一个学生结构体

    struct student {
               //结构体成员
        int number;          //存储学号
        char sex ;             //存储性别
    };//分号是结构体定义的结束标志,必不可少

    3.结构类型重定义要用typedef.

    (1) 

    第一种格式,先定义结构体类型,然后在typedef   如
       struct point{    //点结构体
        float x;     //存储横坐标
        float y;     //存储纵坐标
    };
    typedef struct point point ;

    (2)

     第二种格式,定义结构体的同时,在typedef  如
    typedef struct student {
       //结构体成员

       char name[20];          //存储姓名
        char sex ;             //存储性别

       int number;          //存储学号
    }stu;

    4.结构体变量的定义

      结构体类型= struct + 结构体的名字

    结构体变量访问结构体成员的方式,通过结构体变量.结构体成员  stu.number;

    结构体变量可以直接赋值.如:

    stu xiao = {"xiaocji",'f',10};

    stu  mm = {0};

     mm = xiao;

    下面是一个列子:

     stu stu1 = {"xiaowu",'f',20};
        s
    tu stu2 = {"liuzi",'m',100};
        s
    tu stu3 = { "wangwu" ,'f',11};
        s
    tu maxScore  = {0}; //存储分数最高者
        s
    tu minAge = {0};  //存储年龄最小者
        
    1.先找出两个人中分数最高者
        maxScore = stu1.score > stu2.score ? stu1 : stu2;
       
    2.在找出分数最高者 和 第三个人中的分数最高者
        maxScore = maxScore.score > stu3.score ? maxScore :stu3;
        
    1.先找到前两个人中年龄最小者
       minAge = stu1.age < stu2.age ? stu1 : stu2;
       
    2.在找到年龄最小者和第三人中,年龄最小者
       minAge = minAge.age < stu3.age ? minAge : stu3;
       printf(
    "%s  %s",maxScore.name,minAge.name);

    这个例子就是能很好的体现:结构体可以直接赋值.

    5.结构体嵌套

    //定义学生结构体
    typedef   struct  birthday{
        
    int  year;     //存储年份
        
    int  month;    //存储月份
        
    int  day;      //存储天数
    }Birthday;
    //结构体嵌套,在一个结构体中的结构体成员是另一个结构体类型的变量
    typedef   struct  stu{
        
    char  name[ 20 ]; //存储学生姓名
        
    char  sex ; //存储学生性别
        
    int  age ; //存储学生年龄
        
    float  score;   //存储学生分数
        
    Birthday  birth;  //出生日期
    }Stu;

    展开全文
  • 满意答案zergling333推荐于 2018.02.25采纳率:56%等级:12已帮助:6763人定义一个结构体类型:struct student{int num;char name[20];char sex;int age;float score;char addr[30];};注意不要忽略最后的分号。上面...

    满意答案

    02ae427d08e371d7e90d5b995e828d6d.png

    zergling333

    推荐于 2018.02.25

    02ae427d08e371d7e90d5b995e828d6d.png

    采纳率:56%    等级:12

    已帮助:6763人

    定义一个结构体类型:

    struct student

    {int num;

    char name[20];

    char sex;

    int age;

    float score;

    char addr[30];

    };

    注意不要忽略最后的分号。上面是由程序设计者制定了一个新的结构体类型“struct student”

    ,这是一个类型名,它和int、float神马的具有一样的地位,都可以用来定义变量类型。

    上面只是定义了一个类型,若要定义结构体变量,还需要再写语句:

    struct student student1, student2;

    这就定义了两个变量名分别为“student1”和“student2”的结构体变量。

    当然也可以在声明结构体类型的同时定义变量:

    struct student

    {int num;

    char name[20];

    char sex;

    int age;

    float score;

    char addr[30];

    }student1,student2; /*声明类型和声明变量一次性搞定*/

    还可以直接定义结构体类型变量:

    struct /*不出现结构体名student*/

    {int num;

    char name[20];

    char sex;

    int age;

    float score;

    char addr[30];

    }student1,student2; /*直接定义的结构体变量*/

    00分享举报

    展开全文
  • C语言中结构体类型是由不同的类型的数据组成的,组成结构体类型的每一个数据都称为该结构体类型的成员。在程序设计中,使用结构体时,首先要对结构体类型的组成进行描述,结构体的定义方式如下:struct 结构体类型...

    2e05f965bdb97c11ba9eba90ac515be5.gif

    C语言中结构体类型是由不同的类型的数据组成的,组成结构体类型的每一个数据都称为该结构体类型的成员。在程序设计中,使用结构体时,首先要对结构体类型的组成进行描述,结构体的定义方式如下:

    struct 结构体类型名称

    {

    数据类型 成员名1;

    数据类型 成员名2;

    ……

    数据类型 成员名n;};

    在上述格式中,struct是定义结构体类型的关键字,struct关键字后面是结构体类型名称。在结构体类型名称下的一对大括号中,声明了结构体类型的成员,每个成员由数据类型和成员名共同组成。

    以描述学生信息为例,假设学生信息包含学号(num)、姓名(name)、性别(sex)、年龄(age)、地址(address),那么,存储学生信息的结构体类型可以定义为下列格式:

    struct Student{

    int num;

    char name[10];

    char sex; int age;

    char address[30];

    };

    在上述定义中,结构体类型struct Student由5个成员组成,分别是num、name、sex、age和address。

    在定义结构体类型时,需要注意以下几点:

    (1)结构体类型定义以关键字struct开头,后面跟的是结构体类型的名称,该名称的命名规则与变量名相同;

    (2)结构体类型与整型、浮点类型、字符类型等类似,只是数据类型,而非变量。

    (3)定义好一个结构体类型后,并不意味着编译器会分配一块内存单元存放各个数据成员,它只是告诉编译系统结构体类型由哪些类型的成员构成、各占多少字节、按什么格式存储,并把它们当作一个整体来处理。

    (4)定义结构体类型时,末尾的分号不可缺少。

    猜你喜欢:

    展开全文
  • 定义结构体类型变量

    千次阅读 2019-05-27 23:45:19
    结构体类型他只是一种类型,与 int,float,char,double一样,并没有具体数据,系统也不会给他分配内存,要想在程序中使用“结构体类型”数据,必须定义“结构体类型变量”,并在其中存放具体数据,一定要弄清楚...
  • 结构体类型和结构体变量

    千次阅读 2019-01-17 15:07:56
    1)结构体类型定义 结构体是一种构造数据类型,可以把不同类型的数据整合在一起,每一个数据都...是定义结构体类型的关键字,其后所定义的结构体类型名称,在结构体类型名称下的括号中,定义了结构体类型的成员项,...
  • C语言之结构体类型

    2020-06-05 17:08:11
    1. 声明一个结构体类型的一般形式如下: struct 结构体类型名 { 成员表列 }; 2. 结构体类型变量的定义一般形式为: struct 结构体类型名 { 成员表列 }变量名表列; 3. 结构体类型变量初始化和引用: struct TIME...
  • 定义结构体类型变量的三种方法 先定义结构体类型然后定义变量 struct 结构体名 变量列表 定义结构体类型的同时定义结构体变量 struct 结构体名 { 结构体成员列表 }结构体变量列表 直接定义结构体变量 struct { ...
  • C语言程序设计教案 章节名称 结构体类型数组 授课类型 理论 实验 ?理实一体 实训 实习 班级 地点 周次 星期 节次 授课进度 ?符合 超前 滞后 ?符合 超前 滞后 ?符合 超前 滞后 教学目标 知识目标 1.掌握结构体类型...
  • 本文教你一种定义结构体类型变量的方法。
  • DAY1 C++结构体类型初识 结构体概述 C和C++允许用户自己制定一种数据类型,称为结构体 举例如下: 结构体类型的一般形式 一般形式: struct 结构体类型名 {成员表列:类型名 成员名} struct Student { ...
  • 结构体变量和结构体类型的定义

    万次阅读 多人点赞 2019-08-02 16:43:19
    结构体类型定义 定义方式1: Typedef struct LNode { int data; // 数据域 struct LNode *next; // 指针域 } *LinkList; 定义方式2: struct LNode { int data; // 数据域 struct LNode *next; // 指针域 }; ...
  • 使用结构体类型的必要性 我们这里举出一个例子: 问题:存储一个班级中 4 名学员的信息(学号、姓名、性别和成绩)。 方案一: 分别建立 4 个数组, int num[4]; char*name[4]; char sex[4]; float scroe[4]; 点评...
  • 二叉树的结构体类型

    2020-10-20 19:56:20
    二叉树的结构体类型的说明
  • 结构体类型完全归纳

    千次阅读 2018-09-10 19:58:07
    结构体类型 目录 基本概述 一、结构体类型变量的定义方法及其初始化 1. 定义结构体类型变量的方法 2. 结构体变量的初始化 二、结构体变量的引用 三、结构体数组 1. 定义结构体数组 2. 结构体数组应用举例 四、 指向...
  • 结构体类型别名

    千次阅读 2020-08-28 02:19:32
    结构体类型别名 code typedef_struct .c #include<stdio.h> struct Person{ int number; char sex; double money; } p; //此时定义的p是一个全局变量 void print_message(){ //结构体可以定义在函数...
  • C++结构体类型变量

    2020-12-28 11:45:06
    C++定义结构体类型变量的方法 1、先声明结构体类型再定义变量名,在定义了结构体变量后,系统会为之分配内存单元。 struct Student{ //自定义结构体变量 int num;//学号 char sex;//性别 int age;//年龄 }; 2、...
  • 结构体类型定义时注意事项 要先对结构体类型的组成进行描述,定义方式如下: struct 结构体类型名称 { 数据类型 成员名1; 数据类型 成员名2; 数据类型 成员名3; ..... 数据类型 成员名n; }; 结构体类型定义...
  • C#:结构体类型

    2019-01-26 21:09:41
    定义:和C、C++概念一样,属于同一种东西 结构体语法:声明结构体 public struct 结构体名称 { public 数据类型 变量名; public 数据类型 变量名;...public 数据类型 变量名;...结构体类型 结构体变量名 = new...
  • 目录 一、结构体类型定义 二、结构体变量的定义 ①先定义结构体类型,再定义...使用结构体时,首先需要对结构体类型进行定义,结构体类型的定义如下所示: struct 结构体类型名称 { 数据类型 成员名1; ...
  • C语言结构体数组+结构体类型指针+指向结构体数组的指针+typedef类型结构体数组两种结构体数组的定义形式用sizeof运算符求结构体数组所占字节数结构体类型指针指向结构体数组的指针typedef类型 结构体数组 如果要处理...
  • Go 结构体,定义结构体类型,struct

    千次阅读 2019-03-19 17:34:15
    demo.go(定义结构体类型): package main import "fmt" // 定义结构体类型 (在函数外部定义(全局的),可以在整个项目中使用) type student struct { id int // 结构体的成员 name string age int } func ...
  • 指向结构体类型数组的指针的使用定义一个结构体类型数组,其数组名是数组的首地址,下面是关于指向结构体类型数组的指针的使用具体介绍,欢迎阅读!定义结构体类型的指针,既可以指向数组的元素,也可以指向数组,在...
  • 结构体类型与变量

    2018-07-11 16:43:35
    结构体类型与变量1、结构体类型定义struct 结构体名称 { 类型标识符 成员1; 类型标识符 成员2; … 类型标识符 成员n;}; 定义结构体仅是对事务的说明,说明结构所包含的各个成员及其对应数据类型,这个结构体...
  • C++类和结构体 | 类与结构体类型

    千次阅读 2021-01-17 15:45:40
    C++类与结构体类型 C++与C语言不同,在C语言的基础上增加了class类型后,仍保留了结构体类型struct,而且把它的功能也扩展了,允许用struct来定义一个类型,可以将前面用关键字class声明的类类型改为用关键字struct...
  • 结构体类型的创建

    2017-11-15 17:13:56
    结构体类型的创建 #include "stdafx.h" #if 0 一、有名结构体的俩种定义方式: (1)定义类型的同时,完成了变量的定义 //struct Student 相当于创建了类型,相当于int struct Student { char name[100]; char sex...
  • 定义自身类型的成员是不可以的 定义结构体时,是不可以定义自身类型的成员的。这是因为结构体中各个成员所需的存储空间大小是编译阶段确定的,当用该结构体定义自身成员时,...定义成员函数时,结构体类型做函数参...
  • C#结构体类型变量的定义与初始化

    千次阅读 2020-06-09 13:27:30
    C#中结构体类型变量称为对象或称为结构实例。 定义结构体类型变量称为把结构体类型实例化,这时会根据 结构体类型的定义为结构体变量分配相应的存储空间。 1.结构体类型变量的定义 结构体变量的定义语法如下...
  • 结构体类型变量

    2015-12-09 11:28:00
    今天学习了c语言的结构体数据类型,我一直觉得编程是门熟能生巧的课程,多编程,水平肯定能够提高。最重要的是能够养成那么一种感觉,对程序... struct Student//声明一个结构体类型Student  {  int num;//包括一

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 338,664
精华内容 135,465
关键字:

结构体类型