精华内容
下载资源
问答
  • 结构体变量
    2021-12-08 15:13:57

    在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:

    struct 结构体名{
        结构体所包含的变量或数组
    };

    结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。

    结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。
    像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。

    结构体变量

    既然结构体是一种数据类型,那么就可以用它来定义变量。例如:

    struct stu stu1, stu2;

    定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 5 个成员组成。注意关键字struct不能少。

    成员的获取和赋值

    结构体和数组类似,也是一组数据的集合,整体使用没有太大的意义。数组使用下标[ ]获取单个元素,结构体使用点号.获取单个成员。获取结构体成员的一般格式为:

    结构体变量名.成员名;

    需要注意的是,结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。

    更多相关内容
  • 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年的问题。 2.编写一个函数print, 打印一个学生的成绩数组, 该数组中有5个学生的数据记录,每个记录包括num,name,score[3],用主函数输入...
  • 本文是关于结构体变量的复制与比较。
  • 结构体变量和结构体指针作形参的区别 含结构体变量和结构体指针变量形参的函数调用 指针和数组作为函数形参的区别 概念 结构体变量是指将不同的数据类型整合成一个有机的整体,以便于调用。 struct Student { ...

    目录

    概念

    内存分配

    对象的引用

    结构体变量和结构体指针变量作形参的区别

    以结构体变量和结构体指针变量形参的函数调用


     

    概念

    结构体变量是指将不同的数据类型整合成一个有机的整体,以便于调用。

    struct Student
    {
        int num;
        char name[20];
        int score;
    }
    
    Student stud1;//stud1就是结构体变量

    结构体指针变量是指指向结构体变量的指针或者指向结构体数组的指针。

    Student *stud2;//结构体指针变量

    内存分配

    在C语言中都是使用库函数malloc和free来分配和撤销内存空间的。C++中提供了较简便而功能较强的运算符new和delete来取代函数malloc和free函数。注意:new和delete是运算符,不是函数。

    int main
    {
        Student *p
        p = new Student    //用new运算符开辟一个存放Student型数据的空间
        .
        .
        .
        delete p;         //使用完之后一定要撤销该空间
        
        return 0;
        
    }

    对象的引用

    结构体变量引用成员变量的方式是:

    结构体变量名.成员变量名

    指针引用结构体变量成员的方式是:

    (*指针变量名).成员变量名 //*指针变量名 两边的括号不可以省略
    
    指针变量名->成员名    //->”是“指向结构体成员运算符”,它的优先级同结构体成员运算符“.”一样高。

    结构体变量和结构体指针变量作形参的区别

    结构体变量作为函数形参。此时sc_para和tm_para传递的是两个结构体变量,包含其内部所有的成员变量,占用的内存空间自然而然就大,具体大小取决于结构体变量的大小。

    int REF_STRUCT_PARAM(
                SC_PARAMS sc_para,
                TM_PARAMS tm_para
                )    //SC_PARAMS和TM_PARAMS是两个结构体类型

    结构体指针变量作为函数形参。此时*sc_para和*tm_para传递的是两个指针变量,一个指针只占用四个字节空间,而且存储的是结构体变量的首地址。修改为指针后速度变快,占的内存空间也减小。

    int REF_POINTER_PARAM(
                SC_PARAMS* sc_para,
                TM_PARAMS* tm_para
                )    //SC_PARAMS和TM_PARAMS是两个结构体类型

    以结构体变量和结构体指针变量形参的函数调用

    以结构体变量作形参的函数的调用,函数形参部分直接调用定义的结构体名即可。

    int main
    {
    
        SC_PARAMS sc_para;
        TM_PARAMS tm_para;
    
    
        int REF_STRUCT_PARAM(sc_para, tm_para);  //SC_PARAMS和TM_PARAMS是两个结构体类型
    
        return 0;
    }

    以结构体指针变量作形参的函数的调用,函数形参位置要引用结构体地址。

    
    int main
    {
    
        SC_PARAMS* sc_para;
        TM_PARAMS* tm_para;
    
    
        int REF_POINTER_PARAM(&sc_para, &tm_para);  //SC_PARAMS和TM_PARAMS是两个结构体类型
    
        return 0;
    }

     

     

     

     

     

    展开全文
  • 结构体变量以及结构体数组 1、概述 C 语言允许用户自己指定这样一种数据结构,它由不同类型的数据组合成一个整体,以便引用,这些组合在一个整体中的数据是互相联系的,这样的数据结构称为结构体,它相当于其它高级...

    1、概述

    C 语言允许用户自己指定这样一种数据结构,它由不同类型的数据组合成一个整体,以便引用,这些组合在一个整体中的数据是互相联系的,这样的数据结构称为结构体,它相当于其它高级语言中记录。

    声明一个结构休类型的一般形式如下:

    struct 结构体名
    {成员列表};
    

    结构体名,用作结构体类型的标志,它又称 结构体标记,大括号内是该结构体中的各个成员,由它们组成一个结构体,对各成员都应进行类型声明如:

    类型名 成员名;
    

    也可以成员列表称为域表,第一个成员也称为结构体中的一个域。成员名定名规则写变量名同。

    struct student
    {
        int num;
        char name[20];
        char sex;
        int age;
        float score;
        char addr[30];
    };
    

    2、定义结构体类型变量的方法

    前面只是指定了一个结构体类型,它相当于一个模型,但其中并无具体数据,系统对之也不分配实际内存单元,为了能在程序中使用结构类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据,可以采取以下3种方法定义结构体类型变量。

    (1)先声明结构体类型再定义变量名

    如上面已定义了一个结构体类型 struct student,可以用它来定义变量。如:

    struct student{  //结构体类型名
        ...
        ...
        ...
    }student1, student2 //结构体变量名
    

    定义了 student1, student2 为 struct student 类型的变量。

    在定义了结构体变量后,系统会为之分配内存单元。例如 student1 和 student2 在内存中各占 59 个字节。

    应当注意,将一个变量定义为标准类型(基本数据类型)与定义为结构体类型不同之处在于后者不仅要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型(例如 struct student 类型),因为可以定义出许多种具体的结构体类型。而在定义变量为整形时,只需指定为 int 型即可。

    (2)在声明类型的同时定义变量

    例如:

    struct student
    {
        int num;
        char name[20];
        char sex;
        int age;
        float score;
        char addr[30];
    }student1, student2;
    

    它的作用与第一种方法相同,即定义了两个 struct student 类型的变量 student1, student2 这种形式的定义的一般形式为

    struct 结构体名
    {
        成员表列
    }变量名表列;
    

    (3)直接定义结构类型变量

    其一般形式为:

    struct
    {
        成员表列
    }变量名表列;
    

    即不出现结构体名。

    关于结构体类型,有几点要说明:

    • a. 类型与变量是不同的概念,不是混同,只能对变量赋值,存取或运算,而不能对一个类型赋值,存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。

    • b. 对结构体中的成员(即 域)可以单元使用,它的作用与地位相当于普通变量。

    • c. 成员也可以是一个结构体变量。如:

      struct date // 声明一个结构体类型
      {
          int month;
          int day;
          int year;
      }
      
      struct student
      {
          int num;
          char name[20];
          char sex;
          int age;
          struct date birthday;
          char addr[30];
      }student1, student2;
      

      先声明一个 struct date 类型,它代表 日期 包括3个成员 month, day, year。然后在声明 struct student 类型时,将成员 birthday 指定为 struct date 类型。

    • d. 成员名可以与程序中的变量名相同,二者不代表同一对象。


    3、结构体变量的引用

    (1)不能将一个结构体变量作为一个整体进行输入和输出。

    只能对结构体变量中的各个成员分别进行输入输出。引用结构体变量中的成员的方式为:

    结构体变量名.成员名
    

    例如 student1.num 表示 student1 变量中的 num 成员,即 student1 的 num 项,可以对变量的成员赋值。例如: student1.num = 10010;

    . 是成员(分量)运算符,它在所有的运算符中优先级最高,因此可以把 student1.num 作为一个整体来看待。上面的赋值语句作用是将整数 10010赋给 student1 变量中的成员 num。

    (2)如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。只能对最低的成员进行赋值或存取以及运算。

    例如:结构体变量 student1 可以这样访问各成员:

    student1.num
    student1.birthday.month
    

    注意,不能用 student1.birthday 来访问 student1 变量中的成员 birthday,因为 birthday 本身是一个结构体变量。

    3)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。

    student2.score = student1.score;
    sum = student1.score + student2.score;
    student1.age ++;
    ++ student1.age;
    

    由于 . 运算符的优先级最高,因此 student1.age ++ 是对 student1.age 进行自加运算。而不是先对 age 进行自加运算。

    (4)可以引用结构体变量成员的地址。也可以引用结构体变量的地址。如:

    scanf("%d", &student1.num);// 输入 student1.num 的值
    printf("%o", &student1);// 输出 student1 的首地址
    

    但不能用以下语句整体读入结构体变量如:

    scanf("%d,%s,%c,%d,%f,%s", &student1);
    

    结构体变量的地址主要用于作函数参数,传递结构体的地址。


    4、结构体变量的初始化

    和其它类型变量一样,对结构体变量可以在定义时指定初始值。

    实例

    typedef struct mystruct
    {
    	const char* name;
    	long int age;
    	float score;
    }my;
    
    typedef struct teacher
    {
    	int name;
    	my student;
    	const char* ping;
    }tec;
    
    tec system;
    
    void zero(mystruct t)
    {
    	t.name = "张信哲";
    	t.age = 18;
    	t.score = 98.2;
    }
    
    
    void one(mystruct t[])
    {
    	t[0].name = "张三";
    	t[0].age = 20;
    	t[0].score = 99.9;
    	t[1].name = "张飞";
    	t[1].age = 88;
    	t[1].score = 99.111;
    }
    
    void two(tec system)
    {
    	system.name = 01;
    	system.student;
    	system.ping = "A+";
    }
    

    5、结构体数组

    一个结构体变量中可以存放一组数据(如一个学生的学号,姓名,成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数据值型数组不同之处在于每个数组元素都一个结构体类型的数据,它们分别包括各个成员(分量)项。

    (1) 定义结构体数组

    和定义结构体变量的方法相仿,只需说明其为数组即可。

    struct student
    {
        int num;
        char name[20];
        char sex;
        int age;
        float score;
        char addr[30];
    };
    struct student stu[3];
    

    以上定义了一个数组 stu,其元素为 struct student 类型数据,数组有 3 个元素。也可以直接定义一个结构体数组。如:

    struct student
    {
        int num;
        ....
    
    }stu[3];struct
    
    {
        int num;
         ...
    }stu[3];
    

    (2) 结构体数组的初始化

    与其它类型数组一样,对结构体数组可以初始化如:

    struct student
    {
        int mum;
        char name[20];
        char sex;
        int age;
        float score;
        char addr[30];
    }stu[3] = {{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
                {10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
                {10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"}};
    

    定义数组 stu 时,元素个数可以不指定,即写成以下形式:

    stu[] = {{...},{...},{...}};
    

    编译时,系统会根据给出初值的结构体常量的个数来确定数组元素的个数。

    当然,数组的初始化也可以用以下形式:

    struct student
    {
        int num;
        ...
    };
    struct student stu[] = {{...},{...},{...}};
    

    即先声明结构体类型,然后定义数组为该结构体类型,在定义数组时初始化。

    展开全文
  • C语言结构体变量

    2021-05-20 13:16:22
    结构体是一个或多个变量的集合,这些变量可以是不同的类型,为了处理的方便而将这些变量组织在一个名字之下。比如我要统某个班的学生信息(包括姓名,学号,成绩),每个学生都需要至少3个变量,如若学生人数较多,那...

    结构体是一个或多个变量的集合,这些变量可以是不同的类型,为了处理的方便而将这些变量组织在一个名字之下。比如我要统某个班的学生信息(包括姓名,学号,成绩),每个学生都需要至少3个变量,如若学生人数较多,那需要的变量就非常之多了。为了解决这样的问题,就要用到结构体这种构造类型,我们可以将每个学生的各项信息以不同类型的数据存放到一个结构体中,如用字符型表示姓名,用整型或字符型表示学号、用整型或实型表示成绩。

    b81248522902dedb1b8d417d7291f487.png

    结构体变量的定义

    结构体就是将不同类型的数据组合成一个有机的整体,以便于引用。如定义一个学生的信息:

    struct student{int num;char name[20];int score;};struct为结构体关键字,student就是这结构体的类型名,而 num,name, score就是该结构体的成员,他们可以是不同类型的,注意在定义类型的时候不要对结构体成员num,name, score赋初值。其次就是在大括号后面要有分号“;”。

    定义结构体变量的方式

    定义变量的方式都是大同小异的,都为数据类型+变量名这样一种方式,比如int型,首先得有int这样一个数据类型,然后再用int这个数据类型去定义一个变量,同样的,我们要定义一个结构体变量,必须要有一个结构体类型,然后用这个类型去定义一个变量。结构体变量的定义有多种方式:

    方式一:先定义结构体类型再定义变量名

    67ce5c6fc2757c97bbd763b798fe7880.png

    其中struct是关键字,student是结构体标记(用于为结构体命名),struct student代表该结构体的类型, 大括弧里面就是结构体的成员。注意大括弧的后面一定要有一个分号‘;’。到此为止我们有了"struct student"这样的类型了,struct student就等价于我们的int一样,接下来我们就要定义一个这样类型的变量,定义格式如下:struct student zhangsan; 这个zhangsan就是我们所要的结构体变量。

    方式二:在声明类型的同时定义变量

    如:

    73ce08b516aa780b6c0d9ee6e1abd206.png

    这种方式定义结构体,后续可以根据需要定义新的变量,如struct student Wangwu。 注意:不能用Zhangsan去定义新的变量,这里Zhangsan、Lisi都为变量名而不是结构体类型。

    方式三:直接定义结构体类型变量

    934131e8cb16f3dbae3eef5ab269caf7.png

    这种定义方式中结构体变量只能在定义结构体类型的时候定义,不能再定义其他的变量。这样的定义的结构体类型是没有名字的,我们也可以用typedef重新为这样的结构体类型命,如:

    67f51f5a36c238a0e84e1cb5f75b107c.png

    使用typedef后,我们可以用Zhangsan作为数据类型来定义新的变量。需要注意的是,不能直接使用Zhangsan.num,因为Zhangsan不是变量,而是结构体类型。

    结构体变量的初始化:

    7e02093ac52a9a6f74710418865a1d11.png

    结构体变量的应用:

    结构体中的成员,可以像普通变量那样单独使用,如下面例子中,结构体变量A中的成员num,可以用A.num的方式来使用。

    结构体变量的成员引用:结构体变量名.成员名

    99345b0b983ae0a6767d29d91babc535.png

    关于结构体的一点说明:

    1、不能将结构体变量作为整体进行操作:printf("%d, %d\n", A);错误scanf("%d, %d\n”,&A); //错误printf("%d, %d\n”, A.num, A.score); //正确scanf("%d, %d\n”, &Lucy.num, &Lucy.sex); //正确2、当结构体变量的成员也是结构体类型时,引用必须用最底层的成员变量,如下

    f1d87f289cd12798e3ab5d66414980ca.png

    3、成员名可与程序中的变量名相同,二者代表不同对象

    ad31ad6ad3c15cad6b572dabb93404b4.png

    4、可以引用结构体变量成员的地址,也可以引用结构体变量的地址,例如:scanf("%d", &A.num); //输入A.num的值printf("%d", &A); //输出Bob的首地址目的:主要用作函数参数,传递结构体变量的地址。5、允许具有相同类型的结构变量可以相互赋值,其它情况不允许对结构变量直接赋值。

    0a83a6a05067230d5216940485b52d44.png

    就这么多吧,后续写写结构体数组,结构体指针,共用体,枚举,typedef,最后说一下结构体内存分配相关方面的内容。

    a64636d431e20731bd8c6d6428ad61e5.png

    举报/反馈

    展开全文
  • 结构体指针和结构体变量

    千次阅读 2020-12-26 16:17:58
    今天在写题目的时候出现了一处小错误,就是由于结构体指针和结构体变量没有区分清楚,接下来谈一谈这两者的区别; 2.内存空间上面的差别 假设有如下代码: typedef struct Stu { int age; }stu; 此时定义一个...
  • 一、结构体变量之间的赋值、 二、完整代码示例
  • C语言结构体结构体引例结构体变量的定义结构体变量的使用结构体变量作为函数参数结构体变量的初始化 结构体 引例 输出平均分最高的学生信息 #include <stdio.h> struct student { int num; char name[10]; ...
  • 使用指向结构体变量的指针来访问结构体变量的各个成员。 #include <stdio.h> struct stdtp { int num; char name[10]; float score; }; main() { struct stdtp s={1, "Wang", 89.5}, *p=&s; printf("Num...
  • 9.1 定义和使用结构体变量 9.1.1 自己建立结构体类型 在实际生活中,有些数据是有内在联系的,成组出现的。例如,一个学生的学生、姓名、性别、年纪、成绩和家庭地址等项,是属于一个学生的。人们希望把这些数据...
  • 一、结构体类型的定义结构体是一种新数据类型,属构造类型,它由若干类型各异的“成员”组成;描述这些“成员”可以使用任何基本数据类型,甚至是另外一种构造数据类型都行。其实,从本书开篇,就在定义变量,下边的...
  • 2、结构体的目的是为了描述一个对象,为了把一个对象描述清除必须要所出这个对象的很多属性,而为了表示这些属性就要用到不同的变量,而且变量不止一个。 二、如何来定义结构体: 1、定义结构体 格式: struct 结构体...
  • C语言 | 结构体变量

    2021-04-29 08:41:58
    C语言结构体类型 C语言中允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体。...成员表列也称为域表,每一个成员是结构体中的一个域,成员命名规则与变量名相同。 C语言如何定义结构
  • 结构体变量作为函数

    千次阅读 2020-06-20 10:22:56
    /结构体变量作为函数的参数,修改之后的成员值不能返回到主调函数/ void funvr(struct stud t) { t.num=2000101; t.score=71.0; }/结构体数组作为函数的参数,修改后的元素的成员值能返回到主调函数/ void funar...
  • #include<stdio.h> #include<math.h> #include<string.h> struct Student { long num; char name[50]; char sex; float score; }; int main() { struct Student stu_1;...stu_...
  • 结构体变量是一种复合型变量,每一个结构体变量包含结构体中的所有变量,即是一个变量集合。 #include <stdio.h> /*struct是结构体的标志,books是结构体的名字,book是books结构体的变量 可以定义多个...
  • 可以设一个指针变量,来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。 设p是指向结构体变量的数组,则可以通过以下的方式,调用指向的那个结构体中的成员: (1)结构体变量.成员名。如,stu.num...
  • 例:有如下结构体 //声明一个结构体类型Student struct Student { ...(1)将一个结构体变量的值赋给另一个具有相同街头的结构体变量。student1=student2; (2)引用一个结构体变量中的一个成员的值。例如:stud
  • 结构体变量赋值给同类型的结构体变量     备注:程序遗漏返回值(可以正常编译),代码最后需要加return 0;。...
  • 一 结构体和结构体变量的区别和联系 1 结构体是自定义的数据类型,代表一类事物。 2 结构体变量(实例)是具体的,实际的,代表一个具体变量。 二 结构体变量在内存的布局 三 如何声明结构体 1 基本语法 type...
  • C++结构体变量的初始化 C++对结构体变量可以在定义时指定初始值。 struct Student{ //自定义结构体变量 int num;//学号 char sex;//性别 int age;//年龄 }studeng1={1001,'M',24}; C++结构体变量的引用 C++...
  • 代码区 #include #include main() { struct student { long num; char name[10]; }stu1,*p; p=&stu1; stu1.num=100; strcpy(stu1.name,"jenney"); //此处的赋值方法格外...指针变量的基类型必须与 结构体变量的类型相同
  • 由于经常要在函数中对结构体对象进行操作,所以函数形参中常常都是传值一个结构体指针变量,自己有时为了偷懒,干脆在定义对象时直接定义结构体指针变量,这样实参就不用取地址了。 这样想是没有错,但是结构体指针...
  • 1、先定义结构体类型,再定义结构体变量先定义结构体类型,再定义结构体变量,这种结构体变量定义方式与其他数据类型相同,其语法格式如下:struct结构体类型名结构体变量名;以上一节定义的struct Student结构...
  • C++结构体变量的引用

    2021-05-20 12:07:03
    在定义了结构体变量以后,当然可以引用这个变量,常用的方法有以下几种。1) 可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。如上面的student1和student2都是student类型的变量,可以这样赋值:...
  • 一、结构体变量 1、结构体概念 将不同类型的数据组合成一个有机的整体即为结构体。结构体由许多组织在一起的数据项组成,这些数据项不需要属于同一类型。 2、结构体类型及结构体变量定义 (1)结构体类型声明 struct ...
  • 结构体变量的初始化和引用

    千次阅读 2021-01-21 18:28:37
    结构体变量的初始化和引用 任务描述 本关任务:从键盘输入两个学生的学号,姓名和成绩(整数),分别存入结构体中,输出成绩较高的学生的学号,姓名和成绩。 相关知识 结构体类型用于描述由多个不同数据类型的数据...
  • 结构体变量初始化

    千次阅读 2021-05-24 06:33:00
    数组的初始化,需要通过一常量数据列表,对其数组元素分别...结构体变量的初始化方式与数组类似,分别给结构体的成员变量以初始值,而结构体成员变量的初始化遵循简单变量或数组的初始化方法。具体的形式如下:stru...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 317,726
精华内容 127,090
关键字:

结构体变量

友情链接: qoix.zip