理解结构体

理解结构体引入 数组是相同数据的一个集合 如果不同数据的集合呢 gt 结构体 结构体可以帮助我们将不同类型的数据集合在一起调用 结构体 struct 结构体名 成员列表 例如 struct student int ID char name 成员名 注意 1 结构类型 与结构变量 时两个不同的概念

大家好,我是讯享网,很高兴认识大家。

引入

数组是相同数据的一个集合,如果不同数据的集合呢?---->结构体,结构体可以帮助我们将不同类型的数据集合在一起调用
结构体:
    struct 结构体名{
        成员列表
    }; 

    例如:
        struct student{
            int ID;
            char name;//成员名
        };

注意:
    1.结构类型结构变量时两个不同的概念,其区别如同int类型与int型变量的区别一样.
        如:int x =10;   //x是int型变量
             struct student stu;   //stu是结构变量, struct student是结构类型

    2.结构类型中的成员名,可以与主程序中的变量同名,他们代表不同的对象,互不干扰
    如: int main(){
        int ID=10;
        char name='a';//这里不会和上面的结构体发生冲突,和函数形参,实参一样
    }

    3.结构类型中的数据项,既可以是基本数据类型也可以是结构体类型

结构体的使用


    1.在使用结构体时,需要在主函数定义结构变量;
    struct student{
            int ID;
            char name;//成员名
        };


    int main(void){
        struct student stu;//定义结构体的变量
        stu.ID=666;//对成员进行赋值
        stu.name='d';
        //或者(另外一种定义方法)
        struct student stu ={10,'d'};//包括定义,和按顺序赋值
        return 0;
    }


另外一种定义方法:
    struct student{
            int ID;
            char name;//成员名
        }stu;//直接在结构体末尾分号前定义结构体变量,可以多个表示定义多个结构变量


    int main(void){
        stu.ID=666;//对成员进行赋值
        stu.name='d';
        return 0;
    }//在结构体定义结构变量后,就不需要在主函数定义结构变量名,直接调用就好了

    2.语言中关键字typedef可以为数据类型定义一个别名.
        如有:typedef int fun;
            则标识符fun就是int的一个别名,两者可以互换使用(意思时定义整型变量时既可以用int,也可以用fun)
            也就是说fun具有int的能力,相当一个整型类型
    


    在结构体中使用typedef:


        typedef struct student{
            int ID;
            char name;//成员名
        };//这样使用是没有意义的,因为struct student是结构类型,这个地方缺少一个变量


    这样使用就可以:
        typedef struct student{
            int ID;
            char name;//成员名
        }stu;//这里的struct student和stu都是结构类型,这里的stu就不属于结构变量了,也就是说需要定义结构变量
    
        int main(){
            stu stt;//定义结构变量,结构变量为stt
            struct student stt;//和上面的定义效果一样
        }

 

结构体指针


    通过指针结构变量的指针来访问结构变量的成员,与直接使用结构变量的效果一样.一般来说,如果指针变量pointer已指向结构变量var,则以下两种形式等价:
        (1) var.成员 //分量运算符  '.'
        (2) pointer->成员 //指针运算符 '->'


讯享网


         typedef struct student{
            int ID;
            char name;//成员名
        }stu;
        int main(){
            stu stt;
            stt.ID=666;
            //使用指针
            int *pointer=&stt;//pointer是指针变量
            pointer->ID=555;//使用指针访问结构变量的成员
        }

注意:
    (1)分量运算符左侧的运算对象,只能是结构变量,不能是指针
    (2)指针运算符左侧的运算对象,只能是指向结构变量(或结构数组)的指针变量,否则都出错.

 

结构体数组:


    结构体数组就是数组里面存放的是结构体
例如:
    struct student{
        int ID,age;
    }sut[10];//这里定义了10个结构体,每个结构体里面的成员都是一样的
    //就像是将一个结构体进行复制粘贴
    //使用

    int main(){ //赋值方式
        stu[0].ID=10;//第一个结构体的成员赋值
        stu[1].ID=10;
        stu[2].ID=10;
        stu[3].ID=10;
        stu[4].ID=10;//第四个结构体的成员赋值
        return 0;
    }

 

引用时出现的笔记


    1.strcpy(j1.name,"pink大大");
    //用strcpy函数可以引用复杂的符号充当成员变量的值

    2.在需要同时定义多个引用相同结构体的元素时,我们可以利用函数,节约代码量;
    还有在打印输出时我们也可以用函数进行打印输出

如:
    struct juese
{
    int level;
    char name[20];
    char sex; //m 男
    int power;//攻击力
    int blood;//血量
    float mingzhong;//命中
};//创建一个结构体
//利用函数定义结构变量,可节约代码
//j是结构变量得名字,l表示等级,表示性别,p表示攻击力,b表示血量,m表示命中率
void init(juese *j, int l, char *n, char s, int p, int b, float m)
{
    j->level = l; //指针结构变量的指针j来访问结构变量的成员level
    j->sex = s;//指针结构变量的指针j来访问结构变量的成员sex
    j->power = p;//指针结构变量的指针j来访问结构变量的成员power
    j->blood = b;//指针结构变量的指针j来访问结构变量的成员blood
    j->mingzhong = m;//指针结构变量的指针j来访问结构变量的成员mingzhong
    strcpy(j->name,n);//指针结构变量的指针j来访问结构变量的成员name

}

void show(juese*j);//函数声明(打印输出的声明,因为函数在主函数下面)

int main(void)
{
    juese j1, j2; //定义结构变量
    init(&j1,11,"欧震",'m',1000,100,0.5f);//需要取结构变量的地址,否则无法赋值
    init(&j2,11,"欧",'m',1000,100,0.5f);
    show(&j1);
    show(&j2);//因为是指针需要取地址

}

//函数输出
void show(juese*j){ //写完就可以调用了,又因为这个函数在主函数的下面所以要进行声明函数
    if(j->sex=='m'){
        printf("这是一个%d级的%s,性别男,攻击力%d,血量%d,命中率%g\n",j->level,j->name,j->power,j->blood,j->mingzhong);
    }

    else if(j->sex=='f'){
        printf("这是一个%d级的%s,性别女,攻击力%d,血量%d,命中率%g\n",j->level,j->name,j->power,j->blood,j->mingzhong);
    }

}

小讯
上一篇 2025-04-06 20:07
下一篇 2025-03-15 15:31

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/63440.html