精华内容
下载资源
问答
  • c语言结构类型

    2020-06-13 22:16:34
    1.为什么有结构类型c语言中有很多数据类型:整型,浮点,字符,等等。这些类型都是单一的一种类型,如果我们想把一个人的身高,体重,年龄作为一个整体保存该怎么办呢?因此就产生了结构类型。 struct people { ...

    1.为什么有结构类型?

    c语言中有很多数据类型:整型,浮点,字符,等等。这些类型都是单一的一种类型,如果我们想把一个人的身高,体重,年龄作为一个整体保存该怎么办呢?因此就产生了结构类型。

    struct people
    {
        char* name;
        int year;
        double weight;
        double height;  
    };/*结尾的分号是初学者最容易忽略的*/
    
    struct people p1;
    p1.name = "lufei";
    p1.year = 20 ;
    p1.weight = 60;
    p1.height = 175;
    

    2.声明结构类型的三种方式

    第一种:

    struct structName
    {
    	double weight;
    	double height;
    };
    
    struct structName name, name2, name3;
    

    第二种:
    person1 和 person2 都没有结构类型名称。

    struct
    {
    	double weight;
    	double height;
    }person1, person2;
    

    第三种:
    最常见的方式

    struct structName
        {
            double weight;
            double height;
    
        }person1, person2;
    

    3.结构的初始化,没有给结构成员赋值则默认为0。

    #include<stdio.h>
     struct people
        {
            double weight;
            double height;  
        };
    int main(int argc, char const *argv[])
    {
        //第一种初始化方法,按照从上到下的顺序给值。
        struct people p1 = {10,10};
        //第二种初始化方法,可以指定结构成员赋值。
        struct people p2 = {.weight = 20, .height = 20};
        printf("%f",p2.height);
       
        return 0;
    }
    

    4.结构体的赋值

     	//第一种给结构体赋值方法
        p1.height = 30;
        p1.height = 30;
        //第二种给结构题赋值方法(强制转换成我们定义的结构)
        p1 = (struct people){40,40};
    

    5.注意事项

    结构体之间可以相互赋值,
    p1 = p2相当于
    p1.height = p2.heigh;
    p1.weight = p1.weight;
    而且p1和p2完全是两个变量,不是指向一个变量的地址。结构变量的名字不像数组,数组的名字是指向地址,结构体的名字就是名字,需要使用&取地址符来获得结构体的地址。

    struct people{
    	double height;
    	double weight;
    }p;
    
    struct people *person = &p;
    

    为了简写:
    (*person).height 可以写成 person->height

    6.c语言是传值的,如果我们在一个函数的形参放一个结构体,那么我们在函数内部得到的结构体是从外面传来的值,而不是外面那个结构体本身。

    #include<stdio.h>
    struct people
        {
            double weight;
            double height;  
        };
    void func(struct people p);
    
    int main(int argc, char const *argv[])
    {
        struct people p1 = {10,10};
        func(p1);   
        printf("在main()函数中");
        printf("p.height = %f- p.weight = %f",p1.height,p1.weight);
        
    }
    
    void func(struct people p)
    {
        p.height = 20;
        p.weight = 20;
        //scanf("%f %f",&p.height, &p.weight);
        printf("在函数fun()中");
        printf("p.height = %f- p.weight = %f",p.height,p.weight);
        printf("\n");
    }
    

    运行结果为:
    在函数fun()中p.height = 20.000000- p.weight = 20.000000
    在main()函数中p.height = 10.000000- p.weight = 10.000000

    由此可以看出,c语言是传值的,我们在函数中的形式参数只能得到一个和main函数中值一样的一个结构体,而不能的到main函数中的那个结构体。(现在p1 和 p完全是两个东西,只不过这两个东西名字相等)

    如果想在fun()内部修改main()中的结构体有两种解决办法:

    解决方法一:返回一个结构体。返回一个结构体,让main函数中(外部的)结构体 = func()函数返回的的结构体。但是这种方法太费时间和空间,如果结构体很大,电脑则需要重新开辟块同样大的内存。不建议这样做。

    解决方法二:传指针

    #include<stdio.h>
    /*声明一个结构体*/
     struct people
        {
            double weight;
            double height;  
        };
    void func(struct people *p);
    /*main函数(外函数)*/
    int main(int argc, char const *argv[])
    {
        struct people p1 = {10,10};
        func(&p1);   
        printf("在main()函数中");
        printf("p.height = %f- p.weight = %f",p1.height,p1.weight);
        
    }
    /*func()内函数*/
    void func(struct people *p)
    {
        p->height = 20;
        p->height = 20;
        //scanf("%f %f",&p.height, &p.weight);
        printf("在函数fun()中");
        printf("p.height = %f- p.weight = %f",p->height,p->weight);
        printf("\n");
    }
    

    输出结果:
    在函数fun()中p.height = 20.000000- p.weight = 10.000000
    在main()函数中p.height = 20.000000- p.weight = 10.000000

    此时两个函数中的结构体都指的是main中的p1(现在p1和p是一个东西,只不过名字不一样)

    6.结构数组,与整型数组,浮点数组一样,结构也有结构数组。

    #include<stdio.h>
    
    int main(int argc, char const *argv[])
    {
        struct people 
        {
            int weight;
            int height;
        };
        
        //声明一个结构数组
        const int arraySize = 2;
        struct people peopleArray[arraySize] = { { 10, 10 }, { 20, 20 } };
        
        for(int i = 0; i < arraySize; i++)
        {
            printf("weight = %d - height = %d\n",peopleArray[i].weight, peopleArray[i].height);
        }
           
        
        return 0;
    }
    
    

    7.结构中的结构

    结构不仅支持包括一些整型、浮点型等基本数据类型,结构中也可以包括结构。

    #include<stdio.h>
    
    int main(int argc, char const *argv[])
    {
        struct boy
        {
            double height;
            double weight;
        };
    
        struct gril
        {
            double height;
            double weight;
        };
        //结构中的结构,学生包括男孩和女孩。
        struct student
        {
            struct boy boyOne ;
            struct gril grilOne;
        }s;
        //两种赋值方式
        s = (struct student){ {10, 10}, {20, 20}};
        s.boyOne.height = 30;
        s.boyOne.weight = 30;
        
        printf("boyOne's height = %f- boyOne's weight = %f",s.boyOne.height,s.boyOne.weight);
        return 0;
    }
    
    

    注意事项:

    	struct boy
        {
            double height;
            double weight;
        };
    
        struct gril
        {
            double height;
            double weight;
        };
        //结构中的结构,学生包括男孩和女孩。
        struct student
        {
            struct boy boyOne ;
            struct gril grilOne;
        }s;
        //声明一个指向student的指针变量。
        struct student *sPoint;
    	//可以使用下面的方法访问嵌套结构
        sPoint->boyOne.height;
        //等价于
        (*sPoint).boyOne.height;
        //但是不能写成下面的样子,因为boyOne不是一个指针
        //sPoint->boyOne->heigh;
    
    展开全文
  • C语言结构类型

    2015-12-09 10:36:34
    上周学习到了机构类型这一章,总...之后在学习了枚举类型,当C语言中有枚举类型时,编译器会把其中第一个元素赋值为0,之后的值依次从前一个元素的值加1,二如果中间有个一资格赋初值了,则这个被赋初值了的元素前面的

    上周学习到了机构类型这一章,总的来说比之前的东西更简单,逻辑没那么强。

    主要作用就是把不同类型的数据组合成一个集合体。重点是在给结构体赋值。所占内存是所有数据类型的总和,而之后学习的共用体则是最大的一个数据类型的内存大小。

    之后在学习了枚举类型,当C语言中有枚举类型时,编译器会把其中第一个元素赋值为0,之后的值依次从前一个元素的值加1,二如果中间有个一资格赋初值了,则这个被赋初值了的元素前面的值保持不变,二之后的值重初始值上以此加1。


    展开全文
  • C语言结构类型_笔记

    2020-07-28 17:14:08
    C语言结构类型 本篇文章为个人在学习C语言结构类型过程中的笔记和总结,有不足之处还请大神指正。 1.枚举类型 ⭐符号常量化:用符号而不是具体的数字来表示程序中的数字,是程序能够简洁、便于阅读 const int red = ...

    C语言结构类型

    本篇文章为个人在学习C语言结构类型过程中的笔记和总结,有不足之处还请大神指正。

    1.枚举类型

    ⭐符号常量化:用符号而不是具体的数字来表示程序中的数字,是程序能够简洁、便于阅读

    const int red = 0;
    const int yellow = 1;
    const int green = 2;
    

    枚举类型可以更加方便的方式定义常量:

    枚举类型: 枚举是一种用户定义的数据类型,用关键字 enum 以如下语法来表明

    enum 枚举类型名字 {名字0,...,名字n};
    enum COLOR {RED. YELLOW, GREEN};
    

    第二行语句创建三个常量,其值按顺序排列,即:RED = 0; YELLOW = 1; GREEN = 2;(也可以单独定义,在初始化的时候赋值)

    当需要一些可以排列起来的常量值的时候,定义枚举类型的意义就是给这些常量值名字

    • 枚举量可以作为值

    • 枚举类型可以跟上enum作为类型:

      enum COLOR {RED. YELLOW, GREEN};
      
      void function(enum color c){...};
      
      int main(){
          enum corlor a = RED;
      }
      
    • 编译时实际上是以整数执行内部运算以及外部输入输出的

    枚举的优点:如果有意义上排比的名字,枚举定义比用const int 定义更方便;枚举比宏定义更好,因为枚举有int类型。

    2.结构类型

    结构类型(结构体)可以使用一个类型来表示多个子类型的集合,其中每一个子类型成为该结构的成员。

    结构类型的声明和使用:

    struct data {
    	type name0;		//type:类型; name:成员名
        type name1;
        ...
    };
    
    struct data a;
    

    上述定义方式在使用时为了方便,常使用typedef进行转义简化,如:

    typedef struct data{
        type name;
        ...
    }data;	//之后可以使用data来表示struct data类型声明;
    

    结构类型还有另外的声明方式:

    struct {
        type name0;		//type:类型; name:成员名
        type name1;
        ...
    }a1,a2;				//a1和a2都是一种无名结构,里面都有成员name0和name1...
    //注意:上述的方式仅仅定义了两个变量a1、a2,而没有声明结构类型data!!!
    struct data {
        type name0;		//type:类型; name:成员名
        type name1;
        ...
    }b1,b2;				//b1和b2都是data类型,里面都有成员name0和name1...
    //既定义了变量同时又声明了结构类型
    

    结构类型可以在函数内/外定义,通常定义在函数外,这样结构类型可以被全局使用。

    访问结构成员:

    结构一般使用 ‘.’ 运算符和名字访问其成员,例如:

    data.name0
    data.name1
    

    结构运算

    • 要访问整个结构,直接用结构变量的名字
    • 对于整个结构可以做赋值、取地址,也可以传递给函数参数
    a = (stryct data){1,2};		//假设name0和name1类型为int,那么相当于a.name0=1,a.name1=2;
    

    结构作为函数参数

    • 整个结构可以作为函数参数传入函数
    • 注意:与普通参数相同,将结构变量作为参数传入函数仅仅是将值传递给了函数,不会对变量的值造成改变和影响!
    • 解决无法返回结构的方案:可以创建一个临时结构变量然后返回,也可以使用结构指针作为参数

    指向结构的指针

    用 -> 表示指针所指的结构变量中的成员(意义为”所指“)

    struct data *getstruct(struct data *p){
        scanf("%d", &p->name0);
        return p;	//这里返回一个指针是为了便于使函数参与其他表达式
    }
    

    结构可以嵌套

    指向结构数组的指针

    定义: 指针变量可以指向一个结构数组,这时结构指针变量的值是整个结构数组的首地址。结构指针变量也可指向结构数组的一个元素,这时结构指针变量的值是该结构数组元素的首地址

    一个结构指针变量虽然可以用来访问结构变量或结构数组元素的成员,但是,不能使它指向一个成员。也就是说不允许取一个成员的地址来赋予它。因此,下面的赋值是错误的

    ps=&boy[1].sex;

    而只能是: ps=boy; //(赋予数组首地址)

    或者是: ps=&boy[0]; //(赋予0号元素首地址)

    3.联合类型

    联合类型的定义方式和使用方式与结构类型相似

    与结构类型的区别是:联合结构所有成员共享内存空间,联合类型的所有成员在同一时刻只能有一个起作用,因此他占用的内存空间是所有成员中最大那个的大小

    总结:

    1. 共用体的空间在某一时刻只有一个成员在起作用。
    2. 共用体变量中的成员是最后一次放入的成员。
    3. 共用体变量不能在定义时赋初值。
    4. 共用体变量不能作为函数的参数或函数值,但可使用指向共用体的指针变量。
    5. 共用体可以作为结构的成员,结构体也可以作为共用体的成员。

    ⭐使用联合类型时,应该特别注意有效成员是哪个。

    ⭐可以通过union类型数据间接得到一个整数或其他类型数据的单个字节

    展开全文
  • C语言结构类型变量的说明 说明结构变量有以下三种方法。以上面定义的stu为例来加以说明。 一、先定义结构,再说明结构变量。 如: struct stu  {  int num;  char name[20];  char sex;  float score;  }; ...
    C语言结构类型变量的说明

    说明结构变量有以下三种方法。以上面定义的stu为例来加以说明。
    一、先定义结构,再说明结构变量。

    如:
    struct stu
        {
            int num;
            char name[20];
            char sex;
            float score;
        };
        struct stu boy1,boy2;

    说明了两个变量boy1和boy2为stu结构类型。也可以用宏定义使一个符号常量来表示一个结构类型。例如:
    #define STU struct stu
    STU
        {
            int num;
            char name[20];
            char sex;
            float score;
        };
    STU boy1,boy2;
    二、在定义结构类型的同时说明结构变量。
    例如:
    struct stu
        {
            int num;
            char name[20];
            char sex;
            float score;
    }boy1,boy2;

    这种形式的说明的一般形式为:
    struct 结构名
        {
    成员表列
    }变量名表列;
    三、直接说明结构变量。
    例如:
    struct
        {
            int num;
            char name[20];
            char sex;
            float score;
    }boy1,boy2;

    这种形式的说明的一般形式为:
    struct
        {
    成员表列
    }变量名表列;

    第三种方法与第二种方法的区别在于第三种方法中省去了结构名,而直接给出结构变量。三种方法中说明的boy1,boy2变量都具有下图所示的结构。说明了boy1,boy2变量为stu类型后,即可向这两个变量中的各个成员赋值。在上述stu结构定义中,所有的成员都是基本数据类型或数组类型。成员也可以又是一个结构,即构成了嵌套的结构。例如,下图给出了另一个数据结构。


    按图可给出以下结构定义:
    struct date
    {
            int month;
            int day;
            int year;
        };
        struct{
            int num;
            char name[20];
            char sex;
            struct date birthday;
            float score;
        }boy1,boy2;

    首先定义一个结构date,由month(月)、day(日)、year(年) 三个成员组成。在定义并说明变量 boy1 和 boy2 时,其中的成员birthday被说明为data结构类型。成员名可与程序中其它变量同名,互不干扰。


    展开全文
  • c语言结构类型小结

    2017-10-19 15:30:39
    枚举  1 .格式: enum +类型名字 +(名字1,名字2,·····);  用法: 如果有一列可以排列起来的数,那么,枚举可以给这列数附上符号。  “enum +类型名字”是一种自定义的数据类型,就如int ,double...结构
  • C语言数据类型与三大结构 数据类型 C语言数据类型可以分为基本类型和派生类型。 基本类型:整型,字符型,浮点型,布尔型。 派生类型:指针类型,枚举类型,数组类型,结构体类型,共用体类型 在不同的编译器环境...
  • C语言结构类型

    2020-10-26 21:27:39
    过去我们已经学习过C语言的一些数据类型,如基本数据类型和创建这些类型的数组。那么这些数据类型是否都能解决所有实际问题呢?请看以下的例子: 例1:试编写一个学生成绩管理系统,包括每个学生的姓名,学号,性别...
  • C语言结构类型

    2019-02-25 23:09:56
    枚举类型名字通常并不真的使用,要用d是在大括号里的名字,因为它们就是常量符号,它们的类型是int,值则依次从0到n。 如:enum colors{red, yellow, green}; 创建了三个常量,red的值时0,yellow的值是1,而green...
  • 复合结构类型: 结构 ​ 结构是由程序员自己设计的一种数据类型,用于描述一个事物的的各项数据,由若干个不同的基础类型组成。 设计: ​ struct 结构体名 ​ { ​ 类型1 成员名1; ​ 类型2 成员名2; ​ … ​ }; ...
  • C语言结构

    2020-05-15 18:26:35
    结构类型 1.定义 结构是逻辑上相互联系的一组分量的集合 结构中的分量可以是不同类型的数据,称为结构的成员 在使用结构之前,首先根据具体问题,利用已有的数据类型对结构的组成进行描述,成为结构的定义 2.一般...
  • c语言结构

    2019-01-18 14:11:00
    上图,函数首部中,int是函数类型 max是函数名 圆括号中的int是函数参数类型 x是函数参数名 函数可以是空参数:int main(void)或者int main() 函数体可以不执行任何操作:void dump(){} 每条语句执行完必须有个; ...
  • c语言中的数据类型及循环结构 数据类型分为(1)基本数据类型—— 分为1.空数型 2.字符型 3.数值型 其中数值型分为1。实型 (单精度实型,双精度实型)2整型(短整型,整型,长整型) (2)复合数据类型—— 分为1....
  • struct stuInfo stu; stu = {“lisi”, 2, 22, ‘f’};
  • c语言数据结构和数据类型 C语言中的数据类型 (Data types in C Language) Data types specify how we enter data into our programs and what type of data we enter. C language has some predefined set of data ...
  • C语言数据类型分类

    2021-02-12 12:18:29
    C语言数据类型分类 C语言数据类型的分类方式如下: ...数组类型和结构类型被统称为聚合类型(aggregate type)。联合类型(union type)不被认为是聚合类型,因为在任一时刻下,联合中只有一个成员可以具有值。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,563
精华内容 4,625
关键字:

c语言结构类型

c语言 订阅