当前位置: 首页 > news >正文

结构体——C语言初阶

一.结构体的声明:

(1)结构的基础知识:
  • 结构体是一种构造数据类型
  • 把不同类型的数据组合成一个整体
  • 结构体是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量
  • 需要注意的是,结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。

(2)结构的声明:
  1. 定义全局变量:
    #include<stdio.h>
    struct People
    {char name[20];int age;char sex[5];char tele[12];int high;
    }p1,p2;
    //p1,p2是两个全局变量的结构体变量
    int main()
    {return 0;
    }

  2. 定义局部变量
    #include<stdio.h>
    struct People
    {char name[20];int age;char sex[5];char tele[12];int high;
    };
    int main()
    {struct People p1;//结构体变量的创建return 0;
    }

注意:不要忘记分号!在结束花括号后的分号表示结构体设计定义的结束;

(3)结构体成员的类型:

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

(4)结构体变量的定义和初始化:

初始化:定义变量的同时赋初值

定义的三种方式(上面提到了):

#include<stdio.h>
struct People
{char name[20];int age;char sex[5];char tele[12];int high;
}p1,p2;
//p1,p2是两个全局变量的结构体变量
struct People p3;//全局变量
int main()
{struct People p4;//局部变量return 0;
}

赋值并打印(嵌套):

#include<stdio.h>
struct Peo
{char name[20];int age;char sex[5];
};
struct BOOK
{int page;struct Peo s;
};
int main()
{struct Peo p1 = { "blf",19,"boy" };struct BOOK p2 = { 65,{"qsl",19,"girl"} };printf("%s %d %s\n", p1.name, p1.age, p1.sex);printf("%d %s %d %s\n", p2.page, p2.s.name, p2.s.age, p2.s.sex);return 0;
}

输出结果:blf 19 boy
                  65 qsl 19 girl


二.结构体成员的访问:

  • C语言规定,结构体的普通成员可以通过运算符“点.”去访问其成员
  • 点操作符接受两个操作数。
  • 引用形式:<结构体类型变量名>.<成员名>
  • 结构体指针变量如何访问其成员:可以通过箭头符号的方式去访问其成员
  • (*p).name = = p -> name 左右两种方式等价
  • 结构体成员如果是字符串,不能直接通过符号“=”去修改值,可以通过C语言中的拷贝函数strcpy去修改值

配合代码理解:

#include<stdio.h>
struct Peo
{char name[20];int age;char sex[5];
};
struct BOOK
{int page;struct Peo s;
};
void print1(struct Peo p)
{printf("%s %d %s\n", p.name, p.age, p.sex);
}
void print2(struct Peo* sp1)
{printf("%s %d %s\n", sp1->name, sp1->age, sp1->sex);printf("%s %d %s\n", (*sp1).name, (*sp1).age, (*sp1).sex);
}
int main()
{struct Peo p1 = { "blf",19,"boy" };struct BOOK p2 = { 65,{"qsl",19,"girl"} };printf("%s %d %s\n", p1.name, p1.age, p1.sex);printf("%d %s %d %s\n", p2.page, p2.s.name, p2.s.age, p2.s.sex);print1(p1);print2(&p1);return 0;
}


三.结构体传参:

  1. 函数传参的时候,参数是需要压栈的,如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降;
  2. 结论:结构体传参时,要传结构体的地址

相关文章:

结构体——C语言初阶

一.结构体的声明&#xff1a; &#xff08;1&#xff09;结构的基础知识&#xff1a; 结构体是一种构造数据类型把不同类型的数据组合成一个整体结构体是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量需要注意的是&#xff0c;结构体是一种…...

基于django电影推荐系统

基于django电影推荐系统 摘要 该Django电影推荐系统是一个简单而基础的框架&#xff0c;旨在展示系统的基本组件。系统包括两个主要模型&#xff0c;即Movie和Rating&#xff0c;用于存储电影信息和用户评分。视图层包括展示电影列表和电影详情的功能&#xff0c;使用模板进行页…...

【问题处理】WPS提示不能启动此对象的源应用程序如何处理?

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 最近在用WPS打开word文件中&#xff0c;插入的Excel附件时&#xff0c;无法打开&#xff0c;提示&#xff1a;“不能启动此对象的源应用程序”。 经过上网查找处理办法&#xff0c;尝试解决&#xff0c;现将解决过程记…...

UE 程序化网格 计算横截面

首先在构造函数内加上程序化网格&#xff0c;然后复制网格体到程序化网格组件上&#xff0c;将Static Mesh&#xff08;类型StaticMeshActor&#xff09;的静态网格体组件给到程序化网格体上 然后把StaticMesh&#xff08;类型为StaticMeshActor&#xff09;Instance暴漏出去 …...

【Spring】IoC容器的一些总结与补充

文章目录 1. 创建容器的两种方式相对路径导入绝对路径导入 2. 获取Bean的三种方式getBean后强转类型getBean内写明类别根据类别获取bean 3. 容器层次结构4. BeanFactory5. bean的总结6. 注入的总结 1. 创建容器的两种方式 相对路径导入 ApplicationContext ctx new ClassPat…...

Java GUI实现五子棋游戏

五子棋是一种双人对弈的棋类游戏&#xff0c;通常在棋盘上进行。棋盘为 1515 的方格&#xff0c;黑白双方各执棋子&#xff0c;轮流在棋盘的格点上落子&#xff0c;先在横、竖、斜线上形成五个相连的同色棋子者获胜。五子棋规则简单&#xff0c;易学难精&#xff0c;兼具攻防和…...

Python 集成 Nacos 配置中心

Python 集成 Nacos 配置中心 下载 Nacos 官方 pyhton 库 pip install nacos-sdk-python # 指定国内阿里云镜像源 pip3 install nacos-sdk-python -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com配置 Nacos 相关信息 Global:nacos:port: 8848…...

Debian 11 更新 Node.js 版本

发布于 2023-07-14 在 https://chenhaotian.top/debian/d-upd-nodejs/ 步骤 从 NodeSource 服务下载需要的 Node.js 安装脚本。注意更换版本号。当前的 LTS 版本是 18.x curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -现在可以直接从 apt 安装&#xff0…...

python 对图像进行聚类分析

import cv2 import numpy as np from sklearn.cluster import KMeans import time# 中文路径读取 def cv_imread(filePath, cv2_falgcv2.COLOR_BGR2RGB): cv_img cv2.imdecode(np.fromfile(filePath, dtypenp.uint8), cv2_falg) return cv_img# 自定义装饰器计算时间 def…...

程序员导航站

探路者 hello.alluniverse.vip 开发者导航 - Pro Developer网站导航 探路者是一款极简导航工具&#xff0c;致力于收录的每个站点都有其独特的作用。同时支持自定义导航&#xff0c;让用户快速实现个性化的导航站点。 特性概述 免费ChatGPT 装机必备 开发工具 Git精选项目 …...

BIO、NIO、AIO三者的区别及其应用场景(结合生活例子,简单易懂)

再解释三者之前我们需要先了解几个概念&#xff1a; 阻塞、非阻塞&#xff1a;是相较于线程来说的&#xff0c;如果是阻塞则线程无法往下执行&#xff0c;不阻塞&#xff0c;则线程可以继续往下 执行。同步、异步&#xff1a;是相较于IO来说的&#xff0c;同步需要等待IO操作完…...

深度学习YOLO图像视频足球和人体检测 - python opencv 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络4 Yolov5算法5 数据集6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习YOLO图像视频足球和人体检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非…...

系列七、JVM的内存结构【堆(Heap)】

一、概述 一个JVM实例只存在一个堆内存&#xff0c;堆内存的大小是可以手动调节的。类加载器读取了类文件后&#xff0c;需要把类、方法、常变量放到堆内存中&#xff0c;保存所有引用类型的真实信息&#xff0c;以方便执行器执行&#xff0c;堆内存分为三个部分&#xff0c;即…...

什么是Selenium?如何使用Selenium进行自动化测试?

什么是 Selenium&#xff1f; Selenium 是一种开源工具&#xff0c;用于在 Web 浏览器上执行自动化测试&#xff08;使用任何 Web 浏览器进行 Web 应用程序测试&#xff09;。   等等&#xff0c;先别激动&#xff0c;让我再次重申一下&#xff0c;Selenium 仅可以测试Web应用…...

【蓝桥杯 第十五届模拟赛 Java B组】训练题(A - I)

目录 A、求全是字母的最小十六进制数 B、Excel表格组合 C、求满足条件的日期 D、 取数字 - 二分 &#xff08;1&#xff09;暴力 &#xff08;2&#xff09;二分 E、最大连通块 - bfs F、哪一天&#xff1f; G、信号覆盖 - bfs &#xff08;1&#xff09;bfs&#xf…...

【数据结构】手撕双向链表

目录 前言 1. 双向链表 带头双向循环链表的结构 2. 链表的实现 2.1 初始化 2.2 尾插 2.3 尾删 2.4 头插 2.5 头删 2.6 在pos位置之前插入 2.7 删除pos位置 3.双向链表完整源码 List.h List.c 前言 在上一期中我们介绍了单链表&#xff0c;也做了一些练习题&…...

性能测试 —— Jmeter接口处理不低于200次/秒-场景

需求&#xff1a;期望某个接口系统的处理能力不低于200次/秒&#xff0c;如何设计&#xff1f; ①这个场景是看服务器对某个接口的TPS值是否能大于等于200&#xff0c;就可以了&#xff1b; ②系统处理能力&#xff1a;说的就是我们性能测试中的TPS&#xff1b; ③只要设计一…...

Qt中使用QNetworkAccessManager类发送https请求时状态码返回0

前言 在项目开发中&#xff0c;碰到一个问题&#xff0c;使用QNetworkAccessManager类对象发送https请求时&#xff0c;状态码一直返回0&#xff0c;抓包分析看请求响应也是正常的。费了好大劲终于搞定了&#xff0c;主要是两个原因导致的。 原因一&#xff1a;未设置支持SSL…...

Linux - 物理内存管理 - memmap

说明 裁减内核预留内存占用&#xff0c;在启动log中&#xff0c;发现memmap占用了大块内存&#xff08;446个pages&#xff09;。 On node 0 totalpages: 32576 memblock_alloc_try_nid: 1835008 bytes align0x40 nid0 from0x0000000000000000 max_addr0x0000000000000000 al…...

Python爬虫动态ip代理防止被封的方法

目录 前言 一、什么是动态IP代理&#xff1f; 二、如何获取代理IP&#xff1f; 1. 付费代理IP 2. 免费代理IP 3. 自建代理IP池 三、如何使用代理IP爬取数据&#xff1f; 1. 使用requests库设置代理IP 2. 使用urllib库设置代理IP 3. 使用selenium库设置代理IP 四、常…...

薛定谔共价对接实战:如何为你的靶点蛋白快速找到‘锁死’它的共价抑制剂?

薛定谔共价对接实战&#xff1a;靶点蛋白的共价抑制剂高效筛选策略 药物研发领域正经历一场静默革命——共价抑制剂从曾经的"危险分子"摇身变为现代药物设计的明星。与传统可逆抑制剂不同&#xff0c;共价抑制剂能与靶点蛋白形成稳定的共价键&#xff0c;实现近乎不可…...

UE后期处理材质实战:从黑白蒙版到卡通渲染的进阶应用

1. 黑白蒙版遮罩的底层原理与应用 在UE4后期处理材质中&#xff0c;黑白蒙版遮罩是最基础也最实用的功能之一。我第一次接触这个功能时&#xff0c;被它强大的选择性处理能力惊艳到了——它能像手术刀一样精准地分离出场景中的特定物体。 核心原理其实很简单&#xff1a;通过Sc…...

SDMatte数据库课程设计案例:电商商品图库智能管理系统

SDMatte数据库课程设计案例&#xff1a;电商商品图库智能管理系统 1. 项目背景与需求分析 电商平台每天需要处理大量商品图片&#xff0c;传统人工修图方式存在效率低、成本高、风格不统一等问题。某服装电商平台希望开发一套智能图库管理系统&#xff0c;能够自动完成商品图…...

Z-Image-Turbo_Sugar脸部Lora模型轻量化:基于.NET框架的推理引擎封装

Z-Image-Turbo_Sugar脸部Lora模型轻量化&#xff1a;基于.NET框架的推理引擎封装 最近在做一个C#的桌面工具&#xff0c;需要集成一个AI换脸功能。网上找了一圈&#xff0c;发现Z-Image-Turbo_Sugar这个脸部Lora模型效果不错&#xff0c;但官方只提供了Python的推理脚本。对于…...

别再死磕MIG了!ZYNQ PS端DDR3做帧缓存,用VDMA+HP接口实战指南

ZYNQ视频处理架构革命&#xff1a;VDMAHP接口实战全解析 从传统FPGA到ZYNQ的思维转换 在传统FPGA视频处理项目中&#xff0c;工程师们早已习惯使用MIG IP核管理DDR控制器&#xff0c;通过用户接口实现帧缓存功能。这种模式在纯FPGA环境中运行良好&#xff0c;但当转向ZYNQ平台…...

深入Xilinx 7系列FPGA的PHY层:手把手拆解MIG如何驱动DDR3的地址/命令总线

深入Xilinx 7系列FPGA的PHY层&#xff1a;手把手拆解MIG如何驱动DDR3的地址/命令总线 在高速数字系统设计中&#xff0c;DDR3内存接口的稳定性和性能往往成为整个系统的瓶颈。对于使用Xilinx 7系列FPGA的工程师来说&#xff0c;MIG&#xff08;Memory Interface Generator&…...

如何在Ozon产品测款?用CaptainAI精准锁定爆款潜力款

做Ozon运营&#xff0c;测款是店铺长期盈利的关键——选对款能事半功倍&#xff0c;测错款则会积压库存、浪费成本&#xff0c;中小卖家资金精力有限&#xff0c;盲目铺货测款易陷入“高投入、低回报”困境。很多卖家测款常踩坑&#xff1a;凭感觉跟风选热门款&#xff0c;竞争…...

Musicdl革新性全场景音乐解决方案:5个维度揭秘开源音乐下载技术的破局之道

Musicdl革新性全场景音乐解决方案&#xff1a;5个维度揭秘开源音乐下载技术的破局之道 【免费下载链接】musicdl Musicdl: A lightweight music downloader written in pure python. 项目地址: https://gitcode.com/gh_mirrors/mu/musicdl 在数字音乐产业蓬勃发展的今天…...

跨平台开发终极对决:uniapp、uniapp-X、React Native 与 Flutter 全面解析

作者&#xff1a;前端组件开发 发布日期&#xff1a;2026年2月20日 关键词&#xff1a;跨平台开发、uniapp、uniapp-X、React Native、Flutter、前端框架选型 在移动应用开发日益多元化的今天&#xff0c;如何在保证用户体验的同时提升开发效率&#xff0c;成为每个团队必须面对…...

从零构建CPWC超声成像仿真:Field II实战与模块化工作流解析

1. CPWC超声成像仿真入门指南 第一次接触CPWC超声成像仿真时&#xff0c;我被各种专业术语和复杂的数学公式搞得晕头转向。经过几个月的实战摸索&#xff0c;终于总结出一套小白也能快速上手的方法。CPWC&#xff08;相干平面波复合&#xff09;是近年来超声成像领域的热门技术…...