C语言 结构体初阶

2023-11-14

头文件:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
#include <time.h>
#include <string.h>//字符串拷贝
#include <stdio.h>
#include <limits.h>
#include <ctype.h>
#include <math.h>

结构的声明
结构是一些值的集合,这些值称为成员变量。结构的每一个成员可以是不同类型的变量
数组:一组相同类型元素的集合 结构体:可以表示含有多个元素的复杂变量

struct tag //tag:类型名字
{
    member - list; 成员变量的列表 可以是多个
}; variable - list;变量列表
结构体可以表示含有多个元素的复杂变量 

当前学习过的类型都是内置类型 一些复杂类型需要用结构体表述 
member_list就可以表述结构体对象多个属性

描述一个学生 结构体创建方式 1.

struct stu//tag名字根据实际情况命名
{
	//描述学生的相关属性
	char name[20];
	int age;
	char sex[5];
	char tel[12];//电话需要用字符串描述
}s3,s4;//结构体类型的变量 全局变量

int main()
{
	struct stu s1;//要留下struct 也是结构体变量 是局部变量
	struct stu s2;
	//s1 s2是结构体类型的变量 局部变量

	return 0;
}

描述一个学生 结构体创建方式 2.

typedef struct stu
{
	//描述学生的相关属性
	char name[20];
	int age;
	char sex[5];
	char tel[12];
}stu;//stu是重命名产生的新的类型

int main()
{
	stu s5;//使用typedef类型
 //有了typedef可以省略struct,没有typedef不能省略struct
	return 0;
}

结构的成员可以是标量、数组、指针、甚至是其他结构体

结构体的初始化

struct B
{
	char c;
	int i;
};

struct S
{
	char c;
	int num;
	int arr[10];
	double* pd;
	struct B sb;//其他结构体类型的变量
	struct B* pb;//结构体的指针pb

}s1;//全局变量 利用结构体创建结构体变量

struct S s2;//S2是全局变量 利用结构体创建结构体变量

int main()
{
	double d = 3.14;
	//按照顺序初始化 结构体的初始化也使用大括号
	struct S s3 = { 'q',100,{1,2,3},&d,{'a',99},NULL };//结构体成员初始化 s3是局部变量
	//指定成员初始化
	struct S s4 = { .num = 1000, .arr = {1,2,3,4,5} };//局部变量
	
	return 0;
}

结构体成员的访问
结构体传参不涉及值的修改可以传参,结构体传参尽量传结构体的地址过去
函数传参的时候,参数是需要压栈的,如果传递一个结构体对象的时候,结构体过大,
参数压栈的系统开销比较大,所以会导致性能下降

结论:结构体传参传地址

eg、创建一个学生信息结构体,并打印学生信息,涉及到结构体传参,

struct S
{
	char name[20];
	int age;
};

void set_s(struct S *t)//形参是实参的一份临时拷贝
{
	(*t).age = 18;
	//t.name = "zhangsan";//错误,因为name是数组名,数组是常量的地址
	strcpy(t->name, "zhangsan");//字符串你拷贝
}

void print_s(struct S *t)
{
	printf("%s %d\n", t->name, t->age);
}

int main()
{
	struct S s = { 0 };
	//写一个函数给s中存放数据
	set_s(&s);//实参传递给形参
	//修改s的值,数据进行更改
	//写一个函数打印s中的数据
	print_s(&s);
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言 结构体初阶 的相关文章

随机推荐

  • 设计模式--FlyWeight--结构型

    程序员是沟通人和机器交流 意图 Intent 运用共享技术有效地支持大量细粒度的对象 设计模式 GoF 结构 structure 面向对象的代价面向对象很好地解决了系统抽象性的问题 同时在大多数情况下 也不会损及系统的性能 但是 在某些特殊
  • 微信小程序animation

    wxml
  • LINUX 查询已安装的软件信息

    问题 1 列出当前主机已安装的所有RPM软件 2 查看firefox软件包的安装清单 3 查询ifconfig命令程序是安装哪个软件包后产生的 4 查看firefox软件包的用途 方案 查询所有已安装的rpm包 可以利用命令rpm qa 查
  • CentOS 修改IP地址, DNS, 网关

    一 CentOS 修改IP地址 修改对应网卡的IP地址的配置文件 vi etc sysconfig network scripts ifcfg eth0 修改以下内容 DEVICE eth0 描述网卡对应的设备别名 例如ifcfg eth0
  • 【满分】【华为OD机试真题2023 JAVA&JS】整理扑克牌

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 整理扑克牌 知识点贪心排序 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定一组数字 表示扑克牌的牌面数字 忽略扑克牌的花色 请按如下规则对这一组扑克牌进行整
  • 【Linux】远程连接服务

    1 什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统 让你在远程终端前登录linux主机以取得可操作主机接口 shell 而 登录后的操作感觉就像是坐在系统前面一样 2 远程连接服务器的功能 分享主机的运算能力 服务
  • 服务器传感器不显示,服务器传感器不显示

    服务器传感器不显示 内容精选 换一换 不建议将挂载至Linux系统云服务器的云硬盘卸载后 重新挂载至Windows系统云服务器 也不建议将Windows系统云服务器上的云硬盘重新挂载至Linux系统云服务器 在这种情况下 由于文件系统不一致
  • C++ Primer阅读笔记--函数重载和内联函数

    1 函数重载 main 函数不能重载 重载函数在形参数量或形参类型上有所不同 不允许两个函数除了返回类型外其他所有的要素都相同 即函数重载不允许只有返回类型不同 如果形参是某种类型的指针或引用 则通过区分其指向的是常量对象还是非常量对象可以
  • php 日期1900年开始,php日期操作函数

    header content type text html charset utf 8 总结php操作时间的函数 1 cal days in month calendar month year 函数针对指定的年份和日历 返回一个月中的天数
  • Https如何保证了数据的安全?

    Https与Http在数据传输过程的差别 Https与Http都是OSI模型中传输层协议 而唯一不同的就是Https中在Http的应用层和TCP IP增加了一个SSL TLS层 其实也是属于应用层 主要用来对数据进行加解密 保证数据的传输的
  • 服务器系统环境初始化,Centos7系统

    服务器初始化环境 更新yum源 并添加必要系统工具 修改时区 设置系统时间 ntpdate时间同步服务 修改字符集zh CN UTF 8 关闭selinux 内核优化sysctl conf 调整文件描述符ulimit 即单个进程的最大文件打
  • 模拟电路设计的九个级别,你是模电几段?

    众 生 所 搬 周 硬 知 套 模拟电路设计的九个级别 类似下围棋的段位 快来看看自己处于什么水平 感觉九段已经是世外高人了 一段 你刚开始进入这行 对PMOS NMOS BJT什么的只不过有个大概的了解 各种器件的特性你也不太清楚 具体设
  • VSCode——修改VSCode背景图片

    1 以管理员身份运行VS Code 安装background插件 2 打开设置 在搜索框中输入background 选择扩展中的plugin background 选择在setting json中编辑 3 在用户设置中输入以下代码 修改完后
  • [QT入门篇]信号槽机制

    一 信号与槽的引入 信号与槽 Signal Slot 是 Qt 编程的基础 信号槽 实际是观察者模式 发布 订阅模式 当某个事件发生之后 比如 按钮检测到自己被点击了一下 它就会发出一个信号 signal 这种发出是没有目的的 类似广播 如
  • 【NLP】第 1 章 :机器阅读理解简介

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • Python可视化-气泡图

    气泡图类似散点图 也是表示XY轴坐标之间的变化关系 也可以像彩色散点图给点上色 区别在于可以通过图中散点的大小来直观感受其所表示的数值大小 一 数据文件准备 1 PeopleNumber csv city people price NJ 8
  • Android VNDK的作用

    本文目的是让你理解VNDK是什么作用 暂不做细节讲解 在Android 8 0及更高版本中 引入了很多技术都是为了将system和vendor分离 这样设备厂商和芯片供应商只需关心vendor实现 那么vendor实现时要加载framewo
  • 【总结】前端常用编码写法合集

    一 css样式 1 文字多行溢出 单行溢出 overflow hidden white space nowrap text overflow ellipsis 多行溢出 display webkit box webkit box orien
  • Vue教程(一):Vue核心

    Vue教程 一 Vue核心 1 1 Vue简介 1 1 1 Vue是什么 一套用于构建用户界面的渐进式JS框架 1 1 2 谁开发的 尤雨溪 2015 10 27 正式发布 Vue1 0 0 Evangelion 新世纪福音战士 2016
  • C语言 结构体初阶

    头文件 define CRT SECURE NO WARNINGS 1 include