C-042.结构体类型的基本概念以及初始化的多种方式

构造类型:由已有的数据类型构成类型


1、数组:多个同种类型的数据构成的那么一种类型
      特点:只能存放一种数类型
2、结构体:从来存放表示某种特定含义的一组数据
      特点:它是对数据封装(函数是对功能封装)
      好处:1.提高代码的可读性
                2.提高数据易用性
                3.提高代码可维护性

定义结构体:
1、定义结构类型
struct 结构类型名称{
成员类型 成员名称;
...
}; 必须加分号

2、通过结构体类型定义结构体变量

格式:struct 结构类型名称 结构体变量名称;

int main(int argc, const char * argv[]) {
    
    //1.定义一个结构体,封装它的成员类型和名称,也可以说定义它的属性,比如年龄、名字、身高、性别
    struct Person{
        int age;
        char * name;
        double height;
        char sex;
        //...等等属性
    };
    
    //2.定义一个结构体变量
    struct Person per1;
    per1.age = 10;
    per1.name = "龙叔叔";
    printf("age = %d,name = %s\n",per1.age,per1.name);
    
    struct Person per2;
    per2 = per1;        //同类型的变量可以相互赋值
    printf("age = %d,name = %s\n",per2.age,per2.name);
    
    
     //3.定义匿名的结构类型的同时需定义结构体变量
    
    struct {
        int age;
        char *name;
    }p1,p2 = {2,"cat2"};
    
    p1.name = "cat1";
    p1.age = 1;
    //p1 = (struct){1,"cat"}; 3.1匿名结构体不能整体赋值,只能单体赋值
    
    printf("age = %d,name = %s\n",p1.age,p1.name);
     printf("age = %d,name = %s\n",p2.age,p2.name);
    
    //3.2匿名的结构体不能重复使用,要定义p3等,必须重写结构体。因为它没有结构体名称
    struct{
        int age;
        char sex;
    } p3;
    
    return 0;
}


结构体类型的多种初始化方式:

int main(int argc, const char * argv[]) {
/*
    第一种方式:
    1、定义结构类型
    2、定义结构体变量
    3、对结构体变量初始化
*/
    struct Person{   //1.先定义结构体类型
        int age;
        char * name;
    };
    
    struct Person per1;//2.定义结构体变量
    per1.name = "小龙";//3.初始化 一一赋值
    per1.age = 20;
    per1 = (struct Person){28,"龙叔叔"};//3.也可以一次性赋值,不过要按照属性顺序
    printf("age = %d,name = %s\n",per1.age,per1.name);//打印
    
    //第二种方式:定义的结构体变量的同时直接初始化
    struct Dog{
        int age;
        char * name;
    };
    struct Dog dog = {1,"旺财"};//这边大括号前面不用再加结构体类型了
    printf("age = %d,name = %s\n",dog.age,dog.name);//打印
    
    //第三种方式:定义的结构体类型的同时直接定义变量和初始化
    struct Cat{
        int age;
        char * name;
    }cat1 = {1,"cat1"},cat2 = {2,"cat2"};
    printf("age = %d,name = %s\n",cat1.age,cat1.name);//打印
    printf("age = %d,name = %s\n",cat2.age,cat2.name);//打印
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值