引入


使用传统技术解决
需要定义多个变量或数组

结构体与结构体变量的关系示意图

类似Java类中的对象(结构体)与属性(结构体变量)
一切物体都可以看作对象(结构体)

补充:C语言数据类型

简单使用案例


代码
Cat是我们自己定义的数据类型
struct Cat cat1;//创建struct Cat的一个变量

练习

输入字符串,匹配person信息

#include<stdio.h>
#include<string.h>
//结构体 struct
//输入字符串,匹配person信息
#define SIZE 100
int main()
{char s[SIZE];printf("please input s:\n");gets(s);struct Person{char *name;int age;char *car;};//不要忘记;struct Person p1;struct Person p2;p1.name="dq";p1.age=18;p1.car="WT";p2.name="ww";p2.age=12;p2.car="ET";if(strcmp(s,p1.name)==0){printf("name=%s age=%d car=%s\n",p1.name,p1.age,p1.car);}else if(strcmp(s,p2.name)==0){printf("name=%s age=%d car=%s\n",p2.name,p2.age,p2.car);}else{printf("no found\n");}getchar();//entergetchar();return 0;
}

结构体和结构体变量的区别和联系

结构体变量在内存中的布局

结构体成员

声明结构体/结构体包含的变量

结构体成员的基本介绍

注意事项

结构体定义的三种形式

创建结构体的三种方式
方式1:

方式2:

方式3:匿名结构体

结构体成员的获取和赋值

方式1:

方式2:

使用案例:

整体使用代码

#include<stdio.h>
//定义结构体的方式&结构体成员的定义和赋值方式int main()
{//定义结构体的方式1struct A{int aage;char*aname;};struct A a={99,"A"};printf("age=%d name=%s\n",a.aage,a.aname);//定义结构体的方式2struct B{int bage;char*bname;}b;//没有b={90,"B"}; 因为struct B是一个整体,只有struct B b={90,"B"}b.bage=10;b.bname="B";printf("age=%d name=%s\n",b.bage,b.bname);//定义结构体的方式3struct{int cage;char*cname;}c={88,"C"};printf("age=%d name=%s\n",c.cage,c.cname);getchar();return 0;
}

结构体案例练习1


补充:spintf()函数

Sprint(字符串,”%原先的类型”,要转换的数据类型变量)
将其他数据类型转换到字符串中
“%8.2f”代表一共有8位,2代表小数的位置,不够用空格补齐

结构体是值传递,在传递时会拷贝一份值,对原来的值没有影响

#include<stdio.h>
//小狗案例
char*say(struct Dog dog);
struct Dog{//结构体char *name;int age;double weight;
}dog={"dog",3,10.8};
int main()
{char*s=say(dog);printf("结果:%s\n",s);getchar();return 0;
}
char*say(struct Dog dog)//形参为struct Dog类型{static char info[100];//局部变量/*Sprint(字符串,”%原先的类型”,要转换的数据类型变量)将其他数据类型转换到字符串中*/sprintf(info,"name=%s age=%d weight=%.2f",dog.name,dog.age,dog.weight);dog.name="MMMM";//对输出的内容没有影响//结构体是值传递,在传递时会拷贝一份值,对原来的值没有影响return info;
}

结构体案例练习2


代码

#include<stdio.h>
//结构体--盒子案例
char* info(struct Box box);
struct Box{double l;//长double w;//宽double h;//高
};
int main()
{double l;//长double w;//宽double h;//高printf("please input the information of box:\n");//double %lfscanf("%lf %lf %lf",&l,&w,&h);struct Box box={l,w,h};printf("information:%s\n",info(box));getchar();//entergetchar();return 0;}
char* info(struct Box box)
{static char s[100];//局部变量--staticdouble v=box.l*box.w*box.h;sprintf(s,"l=%.2f w=%.2f h=%.2f v=%.2f",box.l,box.w,box.h,v);return s;
}

结构体案例练习3

代码:
strcmp()==0与!strcmp()效果一样
!strcmp()//0代表假,非0为真,所以使用!取反(真取反为0)

visitor.name是数组,本身就是地址,而visitor.age是整型变量,要使用&visitor.age取地址(优先级:.高于&)

*visitor:获取的是visitor本身

#include<stdio.h>
#include<string.h>
//结构体--景区门票案例:使用地址传递//函数原型/声明
double ticket(struct Visitor*visitor);
struct Visitor{char name[10];int age;double pay;//需要支付的门票
} visitor;
int main()
{int i=1;while(1){printf("please input information%d:name age\n",i);scanf("%s %d",visitor.name,&visitor.age);if(!(strcmp(visitor.name,"n"))){break;//结束while循环}visitor.pay=ticket(&visitor);printf("pay=%.2f\n",visitor.pay);i++;}printf("exit\n");getchar();//entergetchar();return 0;
}
//使用结构体指针,传递地址,提高效率
double ticket(struct Visitor*visitor)
{//使用*visitor取的具体的visitor变量if((*visitor).age>=18)return 20;elsereturn 0;
}

C语言 结构体 struct Cat cat1;相关推荐

  1. c语言结构体定义蚂蚁,C语言结构体(struct)常见使用方法

    C语言结构体(struct)常见使用方法 C语言结构体(struct)常见使用方法 基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合) ...

  2. C语言 结构体Struct 中冒号的用法

    C语言 结构体Struct 中冒号的用法 本文有部分内容参考菜鸟教程-C 位域 . 关于"位域"的说明 有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位. ...

  3. C语言结构体struct详解与实例

    目录 1.定义 2.应用 2.1初始化 2.2使用 3.结构体对齐规则与存储 1.定义 C语言中结构体(struct关键字定义)是一种自定义数据类型.通过结构体的定义可以将多种不同类型数据形成一个组合 ...

  4. 关于C语言结构体(struct)介绍

    转自:微点阅读  https://www.weidianyuedu.com 导读:       C语言结构体,怎么理解? 你可以把它想象成一个桌面上的文件夹,这个文件夹里面可以有各种各样的文件,当然也 ...

  5. C语言——结构体struct与typedef的使用

    我们常常在某些C语言代码中看到有时候typedef关键字和struct一起连用定义结构体,有时候只用struct关键字直接定义结构体,在此记录两者的一些用法,给自己做一个笔记,希望对大家也有所帮助.如 ...

  6. C语言怎么存储结构体,C语言结构体Struct怎么使用?

    在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为:struct结构体名{结构体所包含的变量或数组};结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相 ...

  7. c语言结构体语法分析,C语言结构体struct的语法解析

    本节内容需要结合视频讲解才能更容易理解,视频播放地址如下: 用java开发编译器 本节,我们着重研究结构体定义,也就是struct 这种变量定义,C语言编译器是如何解析的,本节我们要解析的结构体定义如 ...

  8. C语言结构体struct的语法解析

    本节内容需要结合视频讲解才能更容易理解,视频播放地址如下: 用java开发编译器 本节,我们着重研究结构体定义,也就是struct 这种变量定义,C语言编译器是如何解析的,本节我们要解析的结构体定义如 ...

  9. C语言 结构体struct总结

    文章目录 一.前言 二.结构体的引入 三.结构体声明 四.结构体变量的定义 五.结构体变量的初始化 六.结构体变量成员的访问 七.结构体存储原理 八.结构体数组 8.1结构体数组的定义 8.2结构体数 ...

最新文章

  1. 为什么阿里巴巴规定禁止超过三张表 join?
  2. 机器人学习--感知环境数据集
  3. Java创建线程的三种方式,以前只知道两种,现在添加一种Callable与FutureTask创建的方式
  4. Android studio导入第三方库的各种方法和eclipse的导入方式对比
  5. Filter_细节_过滤器链(多个过滤器)
  6. sql连接远程服务器索引超出了_手机怎么连接服务器远程桌面?RD client远程桌面使用教程...
  7. C++入门经典-例8.1-类的继承
  8. Swift4.0复习特性、编译标志和检查API的可用性
  9. web前端工程师学习路线指南,完整Web前端学习路线图
  10. xhr返回值_XMLHttpRequest发送POST、GET请求以及接收返回值
  11. shuffle的过程分析
  12. linux使用iscsi磁盘的几个步骤
  13. 超级电容的电压均衡板
  14. html5语音读取文字_微信语音转发给别人播放不了怎么办?该怎么转发?
  15. iOS 菜鸟钻研动态特性——动态类型、绑定、加载
  16. 【SpringBoot+Mybatis】bootstrap/sematic UI与pagehelper实现分页
  17. 【初学者入门C语言】之习题篇(一)
  18. 梆梆加固的病毒分析-破解篇
  19. codeblocks修改字体报错的问题解决
  20. 金融行业市场占有率超五成,ZDNS筑牢金融科技网络根基

热门文章

  1. 怎么在安卓布局里设置滚动字体_Get新技能|如何在手机上设置文字版拼音?
  2. [你必须知道的.NET] 第四回:后来居上:class和struct
  3. 【转】aspx,ascx和ashx使用小结
  4. sql server 数据库忘记sa账户密码/ 无管理员账户解决办法
  5. juc是什么java_JUC简介
  6. 记录一个JS异常Uncaught NotFoundError
  7. REVERSE-PRACTICE-BUUCTF-15
  8. 电影与爆米花(模拟)
  9. 【CodeForces - 266C】Below the Diagonal (递归,子问题,贪心模拟)
  10. 【CodeForces - 260D】Black and White Tree (思维构造,猜结论,细节,构造一棵树)