[C语言]结构体初识

news/2024/10/20 3:31:48/

结构体定义

        结构体是一些值的集合,被成为成员变量,结构的每个成员可以是不同类型的变量

声明:

        定义了一个结构体比如以张蓝图,不占据内存,当你创建了一个结构体变量时,才占空间.

#include<stdio.h>//struct 为结构体关键字,  student 自定义结构体名称
struct student
{//成员变量列表char  name[20];//一个名字int age;       //年龄char sex;      //性别}s1,s2,s3;         //与下面的S变量都是结构体变量,但是s1,s2,s3为全局变量//上方定义了一个自定义的结构体类型main()
{struct student s;      //创建了student 结构体局部变量为 s;}

简便写法:

利用typedef  定义别名,  把 struct student整体 定义别名为stu   ,

定义变量时,利用stu创建结构体变量即可.     此刻stu 为结构体类型

#include<stdio.h>//struct 为结构体关键字,  student 自定义结构体名称, typedef 起别名typedef struct student  
{//成员变量列表char  name[20];//一个名字int age;       //年龄char sex;      //性别}stu;         //上方定义了一个自定义的结构体类型main()
{stu s;      //把struct student 整体 取了一个新名字 stu}

结构体变量可以是标量,变量,指针,数组,其他结构体.

#include<stdio.h>//struct 为结构体关键字,  student 自定义结构体名称struct student  
{//成员变量列表char  name[20];//一个名字int age;       //年龄char sex;      //性别};         struct txt 
{//成员变量列表int a;string str; struct  student s;   //结构体变量成员char   *pc;         //指针变量成员};         main()
{struct txt t={1,"你好",{"李明",12,'男'},arr};   //struct txt t 初始化}

结构体初始化

        1.创建结构体变量时,直接赋初值

main()
{stu s={"李明",20,"男"};      //初始化结  构体变量s}

访问结构体变量

        1.结构体变量.成员变量   (访问嵌套的结构体成员,利用 .嵌套 即可)

      


main()
{struct txt t={1,"你好",{"李明",12,'男'},arr};   //struct txt t 初始化printf("%s",t.str);      //  你好printf("%s",t.s.age);   //  12
}

        2.结构体指针->成员变量

#include<stdio.h>//struct 为结构体关键字,  student 自定义结构体名称, typedef 起别名typedef struct student  
{//成员变量列表char  name[20];   //一个名字int age;           //年龄char sex;          //性别}stu;         //上方定义了一个自定义的结构体类型-----------------------------------------------------------------------------------void print(stu* ps)           //形参为 结构体stu 的指针变量 ps
{printf("%s",ps->name);       //打印结果: 李明
}main()
{stu s={"李明",12,'男'};     print(&s);              //实参 为  &s}

第二种方法比第一种方法好

因为传参数时,参数是需要压栈的,第一个传递整个结构体对象,系统开销较大,传地址则会更小

 

数据结构:

线性结构

  1.         顺序表        (一条顺序的数据)
  2.         链表           (用一条链把数据连续起来)
  3.         栈              (先进后出), 插入一个元素叫"压栈",删除一个元素叫"出栈"
  4.         队列          (先进先出)

树形数据结构

        二叉树,图

 


http://www.ppmy.cn/news/1342337.html

相关文章

node 版本管理器 --- Volta

前言 在我们的日常开发中经常会遇到这种情况:手上有好几个项目,每个项目的需求不同,然而不同项目必须依赖不同版的 NodeJS 运行环境。 基于这种情况,我们一般会使用 nvm 来安装和切换NodeJs。 最近发现了一个更好用的 node 版本管理器 — Volta ,相比于 nvm , Volta 更…

【nginx实战】通过nginx实现http 长连接(即keep alive)

文章目录 一. http的长连接历史1. HTTP短连接模型2. HTTP长连接模型 二. nginx作为代理时实现HTTP长连接1. nginx与client的长连接1.1. keepalive_timeout指令1.2. keepalive_requests指令* 场景分析 2. 保持和server的长连接2.1. location设置* 场景分析 2.2. upstream设置* 场…

FPGA项目(16)——基于FPGA的音乐演奏电路

1.设计要求 能在实验箱上&#xff0c;循环播放一段音乐。&#xff08;需要源码的直接看最后一节&#xff09; 2.设计原理 组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需要的两个基本要素&#xff0c;问题是如何来获取这两个要素所对应的数值以及通过纯硬件…

部署私有知识库项目FastGPT

FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景。 项目文档: [快速了解 FastGpt | FastGptFastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即…

volatile的作用

volatile是用来修饰成员变量的&#xff0c;它的作用有两个&#xff1a;保证变量的修改在多线程之间的可见性、禁止指令重排。 volatile的内存可见性保证 在java内存模型中&#xff0c;变量都是保存在主内存中的&#xff0c;主内存是一块儿公共的内存区域&#xff0c;所有的线程…

Mysql运维篇(四) MySQL常用命令

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; 一、MySQL命令速查表 https://www.cnblogs.com/pyng/p/15560059.html Mysql DBA运维命令大全 - 墨…

python爬虫5

1.selenium交互 无页面浏览器速度更快 #配置好的自己不用管 from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionschrome_options Options()chrome_options.add_argument(‐‐headless)chrome_options.add_argument(‐‐disable‐gpu)# path…

EasyX图形库学习(二、文字输出)

目录 一、文字绘制函数 字体属性结构体:logfont 文字输出 outtextxy 在指定位置输出字符串。 ​编辑 但如果直接使用,可能有以下报错&#xff1a; 三种解决方案&#xff1a; 将一个int类型的分数,输出到图形界面上 如果直接使用&#xff1a; 会把score输入进去根据A…