结 构 体

13 篇文章 0 订阅
订阅专栏

1.1 结构的基础知识

1.2 结构的声明

struct tag
{
 member-list;
}variable-list;

例如描述一个学生:

typedef struct Stu
{
 char name[20];//名字
 int age;//年龄
 char sex[5];//性别
 char id[20];//学号
}Stu;//分号不能丢


1.3 结构体变量的定义和初始化

注意:浮点数在内存中不能精确保存。

//struct Peo
//{
//	char name[20];
//	char tele[12];
//	char sex[5];//女 男 保密
//	int high;
//}p3, p4;
//
//struct Peo p5, p6;
//
//struct St
//{
//	struct Peo p;
//	int num;
//	float f;
//};
//
//void print2(struct Peo* sp)
//{
//	printf("%s %s %s %d\n", sp->name, sp->tele, sp->sex, sp->high);//结构体指针->成员变量
//}
//
//void print1(struct Peo p)
//{
//	printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high);//结构体变量.成员变量
//}
//
//int main()
//{
//	struct Peo p1 = {"张三", "15596668862", "男", 181};//结构体变量的创建
//	struct St s = { {"lisi", "15596668888", "女", 166}, 100, 3.14f};
//
//	printf("%s %s %s %d\n", p1.name, p1.tele, p1.sex, p1.high);
//	printf("%s %s %s %d %d %f\n", s.p.name, s.p.tele, s.p.sex, s.p.high, s.num, s.f);
//
//	print1(p1);
//	print2(&p1);
//
//	return 0;
//}

 结构体嵌套:指在一个结构体中放置另外一个结构体。

struct St
{
    struct Peo p;

    int num;
    float f;
};

结构体打印的两种方式:一种“.”式一种"->"式。

(1)printf("%s %s %s %d\n", sp->name, sp->tele, sp->sex, sp->high);//结构体指针->成员变量

(2)printf("%s %s %s %d\n", p1.name, p1.tele, p1.sex, p1.high);
         printf("%s %s %s %d %d %f\n", s.p.name, s.p.tele, s.p.sex, s.p.high, s.num, s.f);

其中例如 s.p.name指的是s定义的结构体中嵌套p的结构体。

上面的 print1 和 print2 函数哪个好些?
答案是:首选print2函数。
原因:
函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的
下降。
结论:
结构体传参的时候,要传结构体的地址。

C/C++中通过/类中的某个成员变量的内存地址,获取其在/类中的偏移量
DJ_Macros的博客
07-07 3025
引言 这段时间因为工作需要在研究开源工具Xdelta3的源码 ,发现了其中一个很有趣但不算常见的操作,先贴一下源码: static inline xd3_rinst *xd3_rlist_entry(xd3_rlist *l) { return (xd3_rinst *)((char *)l - (ptrdiff_t) & ((xd3_rinst *)0)->link); } 补充一下上面语句中出现的几个类型定义: typedef unsigned char uin
C语言小记:及其在内存中的储存形式
optimism_的博客
05-09 4899
C语言小记:及其在内存中的储存形式 1. 的作用:自定义一个包含多种不同数据类型的变量。 语法 struct 名称 { 成员1; 成员2; 成员3; ... } 定义变量 include<stdio.h> struct RCC//声明一个类型RCC,其中有两个char类型变量,一个int类型变量。 { char cr; char cfgr; .
C语言面向对象编程-实现面向对象编程
LC的专栏
03-30 3696
是一个非常重要的知识点,必须掌握和深入理解使用。现在网络上还经常讨论函数式编程和面向对象编程。很多人认为,C语言编程,就是函数式编程,C++, JAVA等高级语言,才是面向对象编程。 其实,这是错误的认识!面向对象编程是一种思想,是一种编程思路,实现这种编程思路,不局限于是使用C语言还是使用C++语言。 使用C语言也可以实现面向对象编程。例如li...
函数小
ROOM
01-03 554
1)完成对象被删除前的一些清理工作。 2)在对象的生存期束的时刻系统自动调用它,然后再释放此对象所属的空间。 2)如果程序中未声明析函数,编译器将自动产生一个默认的析函数,其函数为空。#include using namespace std; class Point { private: int x, y; public: Point(int xx,int yy); ~Po
php析函数小
angnai5032的博客
02-14 82
l基本语法 class 类名{ public function __destruct(){ //函数 //析函数的最重要的作用,就是释放对象创建的资源 //比如 数据库连接, 文件句柄, 绘图句柄.. } } 说明 (1)析函数都是public (2)__destruct 是关键字,不要修改 (3)析函数没有形式参数 (4)...
指针详解
热门推荐
maxle的博客
11-13 3万+
1、用变量来为指针初始化 struct student //定义了一个 { long stuid; char name[10]; int age; int score; }stu1; //定义了一个变量 struct student stu2; //因为含有名字,所以可以继续定义变量stu2 struct student *stu3; //定义了一个指针 stu3=&stu1; //同指针一样,.
STM32基础之库函数串口的使用(串口1)
m0_58832575的博客
04-12 3319
STM32串口
C++函数、函数后面接冒号 等等
愚人国度的king的博客
04-21 1922
讲在前面 本小有析函数、C++函数后面接:的含义 、C++中public、protected及private用法、条件运算符、fabs()和abs()区别、C++中的内的函数、类中成员函数声明后面接 const、C++中函数定义前加virtual关键字的作用。 析函数 析函数主要作用就是释放资源,避免内存泄漏。析函数与造函数对应,当对象束其生命周期,如对象所在的函数已调用完毕时...
的弹性模量计算_砌弹性模量等参数的取值.doc
weixin_39968820的博客
12-22 3055
弹性模量等参数的取值在有限元模拟中,材料的各性能参数的取值至关重要。烧普通砖抗压强度弹性模量泊松比应力应变曲线砂浆抗压强度弹性模量泊松比应力应变曲线砌应力应变曲线国内外学者提出了各种单轴受压砌关系表达式,有对数函数型、多项式模型以及有理分式型。如施楚贤改进后的式中为不同种类砌的系数。根据普通烧砖砌轴心受压试验的统计,=460。故对于砖砌的受压应力应变曲线为:因当趋近时,趋...
GaAs 纳 米 线 晶 及 光 学 特 性
03-08
GaAs 纳 米 线 晶 及 光 学 特 性
多智能技术应用综述
01-15
多智能技术通过采用各智能间的通讯、 合作、 协调、 调度、 管理及控制来表达实际系统的 、 功能及行为特性, 为各种实际问题提供了一种统一的框架。介绍了多智能技术在几个有代表性领 域的应用,...
基于模拟退火算法的堆石模型参数反演分析
02-27
基于模拟退火算法的堆石模型参数反演分析,朱成冬,,合国内外面板堆石坝的分析现状,本模型参数的准确性对数值分析的可靠性十分重要,参数反演分析具有很重要的实际意义。本文
多智能系统可控性的图论刻画
01-14
利用松弛的等价分化刻画了系统可控性与信息拓扑 之间的关系, 为系统可控性提供了基于图论的判别方法. 基于置换群理论将对称的概念推广到多领航者系统, 并证 明了3 种图论工具(对称性、等价分化和松弛的...
计算机系统张晨曦版课后答案
12-23
计算机系统知识点总 计算机系统是计算机科学的基础之一,对于计算机专业学生和从业人员来说非常重要。本文将对计算机系统的基本概念、层次、虚拟机、翻译、计算机组成、计算机实现、系统加速比、...
蓝桥杯十五届国赛模拟题1答案
Play_Sai的博客
06-11 919
蓝桥杯十五届国赛模拟题1的参考答案 参考解析
Java的c/s架如何同时访问多个数据源
codemami的博客
06-11 1150
在Java的客户端/服务器(C/S)架中,当服务器需要同时访问多个数据源时,通常是在服务器端进行配置和实现的。可以通过继承这个类来自定义多数据源的连接。在Java的C/S(客户端/服务器)架中,实现同时访问多个数据源通常涉及后端服务器的设计和实现。接下来,你需要实现一个动态数据源路由的功能,这通常是通过继承AbstractRoutingDataSource类来实现的。配置数据源:为每个数据源创建DataSource对象,并配置相应的数据库连接信息,如驱动类名、URL、用户名和密码等。
C++】——Stack与Queue(含优先队列(详细解读)
m0_74092462的博客
06-09 1042
优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。
c++进阶(三)】STL之vector的介绍和使用
最新发布
weixin_62196764的博客
06-15 844
1.vector表示的是可变序列大小的容器2、vector就像数组一样,也采用的连续空间来存储元素,这也意味着可以采用下标对vector的元素进行访问。3、vector与普通数组不同的是,vector的大小是可以动态改变的。4、当vector需要重新分配大小时,其做法是,分配一个新的数组,然后将全部元素移到这个数组当中,并释放原来的数组空间。---这就表明原来指向该位置的迭代器已经失效了,所以在插入和删除数据的时候要返回一个合法的迭代器的位置。
采用表示个人基本信息:设计一个描述个人基本信息的 Person,创建两个 变量,并对其赋值,然后实现输出变量的内容,使用比较两个人年龄大小等 功能。个人信息包括:  姓名,采用字符数组表示;  性别,采用字符变量来表示;  年龄,采用 unsigned int 来表示。 任务描述及其步骤: (1)创建 Person。 (2)在 main 函数中:  定义两个 Person 变量 per1 和 per2;  分别为 per1 和 per2 赋值;  比较两个人年龄大小,即比较两个年龄属性值的大小,输出大小关系;  输出 per1 和 per2 的内容。
06-11
好的,以下是代码实现: ```c #include <stdio.h> #include <string.h> // 定义人的基本信息 struct Person { char name[20]; char gender; unsigned int age; }; int main() { // 定义两个人的变量 struct Person per1, per2; // 为 per1 赋值 strcpy(per1.name, "张三"); per1.gender = 'M'; per1.age = 23; // 为 per2 赋值 strcpy(per2.name, "李四"); per2.gender = 'F'; per2.age = 28; // 比较两个人年龄大小 if (per1.age > per2.age) { printf("%s 比 %s 年龄大 %d 岁。\n", per1.name, per2.name, per1.age - per2.age); } else if (per1.age < per2.age) { printf("%s 比 %s 年龄大 %d 岁。\n", per2.name, per1.name, per2.age - per1.age); } else { printf("%s 和 %s 年龄相同。\n", per1.name, per2.name); } // 输出 per1 和 per2 的内容 printf("per1 的信息:\n姓名:%s\n性别:%c\n年龄:%d\n", per1.name, per1.gender, per1.age); printf("per2 的信息:\n姓名:%s\n性别:%c\n年龄:%d\n", per2.name, per2.gender, per2.age); return 0; } ``` 输出果为: ``` 李四 比 张三 年龄大 5 岁。 per1 的信息: 姓名:张三 性别:M 年龄:23 per2 的信息: 姓名:李四 性别:F 年龄:28 ``` 可以看到,我们成功地定义了一个描述人的基本信息的 Person,并创建了两个变量 per1 和 per2,并输出了其内容。同时,我们还实现了比较两个人年龄大小的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 并发编程(多线程) 5996
  • 博客系统程序(页面设计) 2667
  • 网络编程(客户端和服务器的编写) 2561
  • HTTP协议 1831
  • 博客系统(后端编程) 1434

分类专栏

  • JavaEE 10篇
  • MySQL 1篇
  • Java数据结构与算法 2篇
  • JavaSE博客 10篇
  • Java习题 10篇
  • c语言博客 13篇

最新评论

  • 并发编程(多线程)

    很酷的站长: 写的不错,学习了。

大家在看

  • vue3-自定义指令来实现input框输入限制
  • 基础购物车(Javascript)
  • 2024最新AI大模型-LLm八股合集(三)
  • jabita-python库劫持提权-suid
  • 小程序使用uView报TypeError: Cannot read property ‘call‘ of undefined 39

最新文章

  • 博客系统(后端编程)
  • Linux
  • Tomcat+Servlet
2023年12篇
2022年37篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

聚圣源静字的公司起名周易测姓起名在线公司起名软件哪个李易玲起名靠谱吗海贼之苟到大将建筑劳务公司起名字册子修改机器码免费给女孩子起名开放式基金每日净值表文字是谁发明的门店怎么起名字餐饮业如何起名草字头起名字女孩名字同城跑腿公司起名免费网络起名戴姓女孩起名大全喋血钱塘江演员表取名商标起名大全罗生门是什么意思黎兆匡韩姓女生起名营业执照起名大全公司起名的检测杭州中策泰莲庭免费起名字2021免费八字起名广告拦截软件回到古代当匠神西方玄幻小说五行中缺水起什么名字好淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化