C语言之复合类型上卷(十八)(阴阳两极)

news2024/11/20 7:25:59

上一篇: C语言之内存管理(十七)(转世灵童现世)

逐梦编程,让中华屹立世界之巅。
简单的事情重复做,重复的事情用心做,用心的事情坚持做;


文章目录

  • 前言
  • 一、什么是结构体?
  • 二、结构体的定义及初始化
  • 三、结构体数组
  • 四、结构体嵌套
  • 五、结构体赋值
  • 六、结构体数组作为函数的形参
  • 总结
  • 新壁纸


前言

C语言一共有三大复合数据类型,分别为结构体、共用体、枚举类型;

其中结构体与枚举类型可谓是在程序中铺天盖地的存在,所以尤其重要,需要重点学习,共用体的作用相对少一些;


一、什么是结构体?

答案:将多个相同或不同类型的数据存在在一块连续的内存空间中;

特点:结构体中的成员空间是独立的,没有空间,只有大小;

二、结构体的定义及初始化

//模板形式
struct 结构体名称{
    结构体里面包含的变量或者数组;
};

代码如下(示例):

/*-----------------------------------【程序说明】----------------------------
*			 项目命题:   C语言入门篇
* 			 代码所属:   瑶池酒剑仙(枫之剑客)
* 			     作者:   阿甘
* 		     开发时间:   2021/12/13
*			IDE 版 本:   Visual Studio 2015
*		     项目版本:   1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//定义六部曲
//1、定义一个结构体数据类型;
//2、stu是这个结构的名字;
//3、整个结构体的类型是struct stu
//4、结构体类型struct  stu{}中是结构体的成员,共有3个成员,每个成员的类型可以是任意的类型;
//5、定义时,{}后面记得加分号;
//6、不可以给结构体成员赋值;
struct  stu
{
	 int id ;
	 int age;
	 char name[128];
} a;//定义类型时,同时也定义了结构体变量struct  stu a;

struct  stu c;

int main()
{
	 //struct  stu d = { .age=20 };//给部分成员初始化,其他成员内容为0
	 struct  stu d;
	 //如何给结构体成员赋值(如何操作结构体成员)
	 //第一种:
	 //如果通过结构体变量操作结构体成员,使用点域.操作
	 /*d.id = 2;
	 d.age = 20;
	 strcpy(d.name , "world");
	 printf("%d %d %s\n",d.id,d.age,d.name);*/
	  //第二种:
	 //如果通过结构体的地址操作结构体成员,使用->
	 (&d)->id = 3;
	 (&d)->age = 20;
	 strcpy((&d)->name, "world");
	 printf("%d %d %s\n", (&d)->id,(&d)->age,(&d)->name);
	 system("pause");
	 return 0;
}

三、结构体数组

本质上就是一个数组,数组的每一个元素都是结构体;

代码如下(示例):

/*-----------------------------------【程序说明】----------------------------
*			 项目命题:   C语言入门篇
* 			 代码所属:   瑶池酒剑仙(枫之剑客)
* 			     作者:   阿甘
* 		     开发时间:   2021/12/13
*			IDE 版 本:   Visual Studio 2015
*		     项目版本:   1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog

int main()
{
	  //定义一个结构体数组,结构体数组有5个元素,每个元素是struct  stu 类型
	  struct  stu num[5] = { {1,20,"lucy"},{2,21,"bob"},{3,22,"peter"},
	                                               {4,25,"maker"},{5,26,"ubunqu"} };
	                                               
	  for(int i=0;i<sizeof(num)/sizeof(num[0]);i++)
	  {
	      printf("%d %d %s\n",num[i].id,num[i].age,num[i].name);
	  }
	  
	  system("pause");
	  return 0;
}

四、结构体嵌套

代码如下(示例):

/*-----------------------------------【程序说明】----------------------------
*			 项目命题:   C语言入门篇
* 			 代码所属:   瑶池酒剑仙(枫之剑客)
* 			     作者:   阿甘
* 		     开发时间:   2021/12/13
*			IDE 版 本:   Visual Studio 2015
*		     项目版本:   1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog

struct  stu
{
    int id ;
    int age;
    char name[128];
} ;
struct heima_stu
{
    struct  stu s;
    char subject[128];
};
int main()
{
    struct heima_stu heima;
    heima.s.id = 1;
    heima.s.age = 22;
    strcpy(heima.s.name,"ubunqu");
    strcpy(heima.subject,"c++");
    printf("%d %d %s %s\n",heima.s.id,heima.s.age,heima.s.name,heima.subject);
    system("pause");
    return 0;
}

五、结构体赋值

代码如下(示例):

/*-----------------------------------【程序说明】----------------------------
*			 项目命题:   C语言入门篇
* 			 代码所属:   瑶池酒剑仙(枫之剑客)
* 			     作者:   阿甘
* 		     开发时间:   2021/12/13
*			IDE 版 本:   Visual Studio 2015
*		     项目版本:   1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog

int main()
{
    struct  stu a = {1,34,"bob"};
    struct  stu b;
    //1 memcpy
    //memcpy_str( &b,&a);
    //2
    //b.id = a.id;
    //b.age = a.age;
    b.name = a.name;//err
    //strcpy(b.name,a.name);
    //3
    b = a;//ok   相同类型的变量是可以相互赋值
    printf("%d %d %s\n",b.id,b.age,b.name);
    system("pause");
    return 0;
}

六、结构体数组作为函数的形参

代码如下(示例):

/*-----------------------------------【程序说明】----------------------------
*			 项目命题:   C语言入门篇
* 			 代码所属:   瑶池酒剑仙(枫之剑客)
* 			     作者:   阿甘
* 		     开发时间:   2021/12/13
*			IDE 版 本:   Visual Studio 2015
*		     项目版本:   1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct  c13
{
    int  id;
    char name[128];
};

//void set_num(struct  c13 num[5] )
void set_num(struct  c13 *p,int n )
{
    for (int i = 0; i < n; i++)
    {
       //(*(p + i)).id = i + 10;
       p[i].id = i + 10;
       //(p + i)->id = i + 10;
       char buf[128] = "";
       sprintf(buf,"%d%d%d",i,i,i);
       strcpy(p[i].name,buf);
    }
}
int main()
{
    struct  c13 num[5];
    memset(num,0,sizeof(num));
    set_num(num,sizeof(num)/sizeof(num[0]));// num  = &num[0] 
    for (int i = 0; i < sizeof(num) / sizeof(num[0]); i++)
    {
       printf("%d %s\n",num[i].id,num[i].name); 
    }
    system("pause");
    return 0;
}

总结

以上就是今天要讲的内容,本文重点带大家认识结构体的基本情况,以及重要的结构体数组及其应用,在实际应用中,C语言结构体数组常被用来表示一个拥有相同数据结构的群体,例如一个公司的员工、一个医院的医生等;文末了,喜欢的小伙伴帮忙点个赞、收藏、关注一波,谢谢!

新壁纸

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

USB TO SPI(上海同旺电子)调试器调试MCP3201 A/D 转换器

所需设备&#xff1a; 1、USB TO SPI(上海同旺电子)&#xff1b; 2、MCP3201 12 位A/D 转换器; 特性 • 12 位分辨率 • 1 LSB DNL &#xff08;最大值&#xff09; • 1 LSB INL &#xff08;最大值&#xff09;&#xff08;MCP3201-B&#xff09; • 2 LSB INL &#xff…

pdf文件太大怎么变小,如何压缩pdf大小

pdf文件太大怎么变小&#xff1f;如果你是Windows电脑&#xff0c;可以使用PDF编辑器来减小PDF文件的大小&#xff0c;比如这款出色的PDF压缩工具-易我PDF编辑器&#xff0c;它的“压缩”功能提供了两种减小文件大小的方法&#xff0c;这使得它既适合那些只想获得更小的PDF的人…

【vscode】c++程序的自动编译及调试(环境centos)

目录1.新增配置文件&#xff08;1&#xff09;c_cpp_properties.json&#xff08;2&#xff09;files.associations&#xff08;3&#xff09;tasks.json(4)CMakeLists.txt2.断点调试1.新增配置文件 VS Code的配置文件一般是指特定目录下的JSON文件。所谓JSON是一种文本格式&a…

LCF-ATEPC(2020 Elsevier)面向中文的方面级提取和分类

论文题目&#xff08;Title&#xff09;&#xff1a;A Multi-task Learning Model for Chinese-oriented Aspect Polarity Classification and Aspect Term Extraction &#xff08;面向中文的方面极性分类和方面项提取的多任务学习模型) 研究问题&#xff08;Question&#…

适用于 Windows 10/11 电脑 的 5 大好用的离线录屏软件

屏幕录制应用程序可以数字记录出现在任何设备或 PC 屏幕上的内容&#xff0c;并同时以高清流式传输音频和视频。 因此&#xff0c;他们帮助创建营销视频、跟踪客户行为、设计产品演示、监控员工活动、录制教育内容、网络研讨会内容和业务会议内容。 现在您已经意识到屏幕录…

VS系列多通道振弦传感器无线采发仪的数据发送说明

每次设备启动后会将采集到的传感器数据进行内部存储&#xff0c;并在设置好的时间间隔将数据发送出去&#xff0c;通过修改“数据发送方式”参数&#xff0c;监测数据可由数据接口输出也可经由无线网络发送。在发送监测数据时&#xff0c;可通过修改“数据包协议”参数来设置所…

函数和数组习题

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【C语言基础习题】 文章目录知识点习题2.实现一个整型数组的冒泡排序&#xff08;编程体&#xff09;。3.编程题&#xff1a;创建一个整型…

springcloud,springboot各个版本之间的关系

1 版本关系 在实际的开发中如果要自己搭建矿建&#xff0c;发现springcloud&#xff0c;springboot的版本可能是首先需要确定的&#xff0c;那么他们之间的关系是什么呢&#xff1f;看官网&#xff0c;地址 Spring Cloud 左侧是cloud的版本&#xff0c;右侧是对应的文档&…

Splunk Window 客户端迁移

最近客户的Splunk deployment server 要迁移,伴随着client 端的配置也要相应的调整: 先看一下架构: 看一下主要的参数: Summary of key terminology Heres a recap of the key definitions: TermMeaningdeployment serverA Splunk Enterprise instance that acts as a c…

Java中的日期与时间

Java中的日期与时间\huge{Java中的日期与时间}Java中的日期与时间 JavaJavaJava中有很多类是专门用于描述日期类的。 Date类 DateDateDate类&#xff1a;用于表示当前所在系统的日期时间信息。 Date类的构造器 示例&#xff1a; Date d new Date(); System.out.println(d);…

12月第3周榜单丨B站UP主排行榜(飞瓜数据B站)发布!

飞瓜轻数发布2022年12月12日-12月18日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的…

Redis高级篇

redis的四个问题&#xff1a; 1.Redis是基于内存存储,服务重启可能会丢失数据; 2.并发能力问题&#xff1a;单节点Redis能力虽然不错,但也无法满足如618这种高并发的场景(618并发 数量达到数十万甚至上百万); 3.如果reids宕机,服务不可用,则需要一种自动的故障恢复手段; 4.存…

自学Python可以找到工作吗?

自学Python可以找到工作吗&#xff1f;自学Python找工作主要看自己的学习能力&#xff0c;自学能力很强学完并精通当然可以工作&#xff0c;不过对于大多数人而言一般都挺难&#xff0c;学习不成系统&#xff0c;遇到问题没人解决很容易放弃半途而废。 学Python能干很多很多事…

NodeJS安装-Vue模块化项目构建

NodeJS安装-Vue模块化项目构建 一、环境准备&#xff08;NodeJS安装&#xff09; 1. 安装NodeJS 官网自行下载&#xff0c;并安装 2. 配置npm的全局安装路径 npm config set prefix "D:\soft_install\dev\qianduan_dir\nodejs"3. 切换npm的淘宝镜像&#xff0c…

C++11标准模板(STL)- 算法(std::is_permutation)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 判断一个序列是否为另一个…

《记忆力心理学》5个方法 让你过目不忘

《记忆力心理学》 关于作者 赫尔曼•艾宾浩斯&#xff0c;西方心理学泰斗级人物&#xff0c;生活在19世纪的德国心理学家。他是最早用实验的方法对记忆进行量化研究的 人&#xff0c;最受人瞩目的贡献&#xff0c;就是发现了记忆保持曲线。 关于本书 这本书可以看作是记忆心…

全国职业院校技能大赛网络搭建与应用赛项——云平台底层的一些命令

1.列出运行的虚拟机 virsh list 2.列出所有的虚拟机virsh list --all 3.网络信息表&#xff08;20分&#xff09; 显示网络名及所在的vlan idopenstack network show Network10 -c name -c provider:segmentation_id openstack network show Network20 -c name -c provider:s…

学习->C++篇十九:四种智能指针及其实现

目录 为什么需要智能指针&#xff1f; 什么是内存泄露&#xff1f; 如何避免内存泄露&#xff1f; 什么是RAII&#xff1f; RAII有什么用&#xff1f; 智能指针的原理是什么&#xff1f; C的智能指针有哪些&#xff1f; auto_ptr unique_ptr shared_ptr weak_ptr 为什…

【第十五章 分库分表(垂直拆分,水平拆分),MyCat】

第十五章 分库分表&#xff08;垂直拆分&#xff0c;水平拆分&#xff09;&#xff0c;MyCat 1.分库分表&#xff1a; &#xff08;1&#xff09;介绍&#xff1a; ①采用单数据库进行数据存储&#xff0c;存在以下性能瓶颈&#xff1a; A.IO瓶颈&#xff1a;热点数据太多&…

第二证券|A股传奇董秘变身老板,公司IPO过会

A股传奇董秘何愿平卷土重来&#xff0c;但这次不是以董秘的身份。 12月20日&#xff0c;碧兴科技IPO获科创板上市委会议经过&#xff0c;其实控人正是A股曾经的传奇董秘何愿平。作为前碧水源董秘&#xff0c;何愿平曾多年连任A股身家最贵董秘。 二次创业过会 招股书显现&…