七.结构体
admin
2024-02-09 05:59:26
0

目录

一.结构体的定义

1.结构的基础知识

2.结构的声明

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

二.结构体成员的访问

三.结构体的传参


一.结构体的定义

1.结构的基础知识

  • 结构是一些值的集合,这些值称为成员变量;
  • 结构的每个成员可以是不同类型得变量;

2.结构的声明

基本格式:

struct tag          //结构体关键字

{

     member - list; //成员变量
}variable - list; //全局的结构体变量

 注意:

  • 成员变量之间用分号隔开,全局变量之间用逗号隔开;
  • 结构体末大括号后必须加上分号(即使不写全局变量也要加上);

例,使用结构体描述一本书,需要:书名,书的价格,作者和国家。

//struct - 结构体关键字  
//Book - 结构体标签 
//struct Book - 结构体类型 
struct Book {/* 成员变量 */char name[20]; // 定义一个结构体类型int price;  char country[10];  char author[20];
} s1, s2, s3; // s1,s2,s3 是三个全局的结构体变量int main()
{struct Book s; // 创建结构体变量return 0;
}

 用typedef进行定义:

typedef struct Book {char name[20];int price;char auther[10];    char country[20];
} Book;int main()
{Book s1; // 前面加typedef之后可以作为一个单独的类型来使用struct Book s2;// 不影响return 0;
}

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

使用大括号进行初始化:

typedef struct Book {/* 成员变量 */char name[20]; // 定义一个结构体类型int price;  char country[10];  char author[20];
} Book;int main()
{Book s0 = {}; // 使用大括号初始化Book s1 = {"CSDN", 20, "CHINA", "CSDN"};Book s2 = {"活着", 30, "中国", "余华"};return 0;
}

二.结构体成员的访问

通过点操作符(.)进行访问,例:

struct Book {/* 成员变量 */char name[20]; // 定义一个结构体类型int price;  char country[10];  char author[20];
} s1, s2, s3; // s1,s2,s3 是三个全局的结构体变量int main()
{struct Book s={"活着“,30,"中国","余华"};printf("%s %d",s.name,s.price);    //.操作符进行访问
}

 打印结果为:余华 30

三.结构体的传参

传参有两种形式:

  • 传结构体(使用结构体接收);
  • 传地址(使用结构体指针接收);

1.结构体传参

typedef struct Book {char name[20];int price;   char country[10];char auther[20];
} Book;void print_by_s(Book tmp) //结构体为临时变量
{printf("书名: %s\n", tmp.name);printf("价格: %d\n", tmp.price);printf("国家: %s\n", tmp.country);printf("作者: %s\n", tmp.auther);
}int main()
{Book s1 = {"活着", 30, "中国", "余华"}; // 使用大括号初始化/* 打印结构体数据 */print_by_s ( s1 ) ; // 传结构体return 0;
}

2.结构体指针传参

typedef struct Book {char name[20];int price;   char country[10];char auther[20];
} Book;void print_by_s(Book *tmp) //结构体指针
{printf("书名: %s\n", tmp.name);printf("价格: %d\n", tmp.price);printf("国家: %s\n", tmp.country);printf("作者: %s\n", tmp.auther);
}int main()
{Book s1 = {"活着", 30, "中国", "余华"}; // 使用大括号初始化/* 打印结构体数据 */print_by_s ( &s1 ) ; // 传结构体的地址return 0;
}

相比第一种传结构体,传结构体的地址其实更好一些,这是因为:

函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。 并且,传地址效率高,方便修改,也不用再拷贝数据,所以首选传结构体的地址。

本篇到此结束 ,码文不易,还请多多支持哦~

相关内容

热门资讯

杰美特:关于回购注销部分限制性... 证券日报网讯 1月23日,杰美特发布公告称,公司于2026年1月22日召开第四届董事会第二十五次会议...
300391,将退市!4连20... 1月23日晚,*ST长药(300391)发布公告,公司于1月23日收到深交所下发的《事先告知书》,拟...
ChatGPT也开始内测广告,... 手机屏幕的光映在脸上,一位美国网民随口问ChatGPT今晚吃什么,答案的末尾却静静躺着一个“赞助”链...
酒厂倒闭潮,谁在为这场“去泡沫... 你家附近的烟酒店,最近是不是贴上了“旺铺转让”? 2025年一年,全国消失了32万家烟酒店,平均每天...
联播+|四个关键 解锁亮眼成绩... 联播+ 习近平总书记用“顶压前行、向新向优”总结2025年中国经济发展。 2026年1月19日,20...
U23亚洲杯-小仓幸成2球 U... 北京时间1月24日消息,2026年U23亚洲杯决赛展开争夺,中国U23男足迎战日本队。上半场比赛大关...
主动权益基金调仓:加仓周期、金... 深圳商报·读创客户端记者 陈燕青 公募基金四季报披露完毕,主动权益基金的动向也浮出水面。根据WIND...
容百科技融资净偿还9910.5... 雷达财经雷助吧出品 文|吴墨 编|深海 东财Choice数据显示,1月23日, 容百科技获融资买入1...
我国银行理财市场规模首次突破3... (央视财经《经济信息联播》)银行业理财登记托管中心最新数据显示,截至2025年末,我国银行理财市场存...
我国在建最大装机容量钠离子电池... 据中国电建官微消息,近日,中国电建承建的我国在建最大装机容量钠离子电池储能电站——洪湖市100兆瓦/...
光大保德信红利量化混合A:20... AI基金光大保德信红利量化混合A(023106)披露2025年四季报,第四季度基金利润160.87万...
和讯投顾胡云龙:市场再迎转机,... 1月23日,和讯投顾胡云龙表示,今天这根小阳线可不简单,极有可能倒逼出后续加速上涨。这根小阳线来之不...
原创 黄... 今天(1月17日)金价波动让人摸不着头脑,早上还有人说黄金要创新高,结果下午一看,不少品牌金饰直接跌...
倾听“新声”,助“新”成长 “涉诈账户解控,如何既合规又体现服务温度?”“面对老年客户,系统操作时间能否更宽松”……日前,在建行...
“凉都新街市”数字年货展销会启... “这个腊肉闻着好香,一看价格,更香!”家住凤凰山的李阿姨拎着刚选好的腊肉香肠笑得合不拢嘴。 “因为...
博时国企改革主题股票A:202... AI基金博时国企改革主题股票A(001277)披露2025年四季报,第四季度基金利润474.82万元...
原创 从... 2025年,光伏组件龙头厂商晶科能源预亏59亿元至69亿元,第四季度单季最高预亏逼近30亿元 投资...
青山集团:全球“镍矿和不锈钢老... 全球最大的不锈钢及镍生产商青山集团正在将其庞大的工业版图从核心的镍与不锈钢业务,迅速扩展至铝业及新能...
U23国足VS日本首发:王钰栋... 北京时间1月24日晚23:00,2026年U23亚洲杯决赛即将展开争夺,中国U23男足将在沙特吉达的...
农银国企改革混合:2025年第... AI基金农银国企改革混合(002189)披露2025年四季报,第四季度基金利润137.33万元,加权...