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

C语言结构体(一篇学会)

C语言结构体

在C语言中,结构体是一种自定义的数据类型,它允许用户将不同类型的数据组合在一起。结构体由多个变量组成,这些变量称为结构体的成员。结构体成员可以是不同的数据类型,如整数、浮点数、字符或其他结构体等。

结构体的定义格式如下:

struct [structure tag] {member definition;member definition;...member definition;
} [one or more structure variables];

其中,structure tag是结构体类型的名称,member definition定义了结构体的成员,structure variables是一个或多个结构体变量的名称。

例如,下面是一个结构体的定义:

struct person {char name[50];int age;float salary;
};

这个结构体包含三个成员:nameagesalary,分别是字符数组、整数和浮点数类型。

我们可以使用以下语法创建结构体变量:

struct person p1, p2;

这将创建两个名为p1p2person类型的结构体变量。

我们可以使用以下语法访问结构体变量的成员:

p1.name;
p1.age;
p1.salary;

这将分别返回p1结构体变量的nameagesalary成员的值。

结构体在C语言中非常有用,它允许用户创建自定义数据类型,更好地组织和管理数据。

我们可以使用以下语法创建结构体变量,并对其进行初始化:

struct person p1 = {"John Doe", 30, 5000.0};
struct person p2 = {"Jane Smith", 25, 6000.0};

这将分别创建两个名为p1p2person类型的结构体变量,并将它们的成员初始化为指定的值。

访问结构体变量,并赋值

下面是一个例子,我们创建了一个person类型的结构体变量p1,并给它的成员赋值,然后通过访问结构体变量成员的方式获取其值:

#include <stdio.h>
#include <string.h>struct person {char name[50];int age;float salary;
};int main() {struct person p1;strcpy(p1.name, "John Doe");p1.age = 30;p1.salary = 5000.0;printf("Name: %s\\n", p1.name);printf("Age: %d\\n", p1.age);printf("Salary: %f\\n", p1.salary);return 0;
}

输出结果为:

Name: John Doe
Age: 30
Salary: 5000.000000

在上面的例子中,我们首先定义了一个person类型的结构体变量p1,然后分别给它的成员nameagesalary赋值。最后,我们使用printf()函数输出结构体变量成员的值。

结构体作为函数参数

结构体可以作为函数参数,以便在函数中操作和修改结构体的值。以下是一个简单的例子,其中定义了一个printPerson()函数,该函数接受一个person类型的结构体变量作为参数,并打印该变量的成员值:

#include <stdio.h>
#include <string.h>struct person {char name[50];int age;float salary;
};void printPerson(struct person p) {printf("Name: %s\\n", p.name);printf("Age: %d\\n", p.age);printf("Salary: %f\\n", p.salary);
}int main() {struct person p1;strcpy(p1.name, "John Doe");p1.age = 30;p1.salary = 5000.0;printPerson(p1);return 0;
}

输出结果为:

Name: John Doe
Age: 30
Salary: 5000.000000

在上面的例子中,我们定义了一个printPerson()函数,该函数接受一个person类型的结构体变量作为参数,并使用printf()函数打印该变量的成员值。在main()函数中,我们首先定义了一个person类型的结构体变量p1,然后给它的成员nameagesalary赋值。最后,我们调用printPerson()函数并将p1作为参数传递给它,该函数打印p1的成员值。

指向结构体的指针

我们可以使用指向结构体的指针来访问结构体变量的成员。以下是一个例子,我们定义了一个指向person类型结构体的指针,然后使用指针访问结构体变量成员的方式获取其值:

#include <stdio.h>
#include <string.h>struct person {char name[50];int age;float salary;
};int main() {struct person p1;struct person *ptr;ptr = &p1;strcpy(p1.name, "John Doe");p1.age = 30;p1.salary = 5000.0;printf("Name: %s\\n", ptr->name);printf("Age: %d\\n", ptr->age);printf("Salary: %f\\n", ptr->salary);return 0;
}

输出结果为:

Name: John Doe
Age: 30
Salary: 5000.000000

在上面的例子中,我们首先定义了一个person类型的结构体变量p1和一个指向person类型结构体的指针ptr。然后,我们使用&运算符将p1的地址赋给ptr。我们可以使用ptr->nameptr->ageptr->salary的方式访问p1结构体变量的成员,它们的效果与(*ptr).name(*ptr).age(*ptr).salary相同。最后,我们使用printf()函数输出结构体变量成员的值。

相关文章:

C语言结构体(一篇学会)

C语言结构体 在C语言中&#xff0c;结构体是一种自定义的数据类型&#xff0c;它允许用户将不同类型的数据组合在一起。结构体由多个变量组成&#xff0c;这些变量称为结构体的成员。结构体成员可以是不同的数据类型&#xff0c;如整数、浮点数、字符或其他结构体等。 结构体…...

嵌入式软件开发之Linux下C编程

目录 前沿 Hello World&#xff01; 编写代码 编译代码 GCC编译器 gcc 命令 编译错误警告 编译流程 Makefile 基础 何为 Makefile Makefile 的引入 前沿 在 Windows 下我们可以使用各种各样的 IDE 进行编程&#xff0c;比如强大的 Visual Studio。但是在Ubuntu 下如何进…...

普通Java工程师 VS 优秀架构师

1 核心能力 1.1 要成为一名优秀的Java架构师 只懂技术还远远不够&#xff0c;懂技术/懂业务/懂管理的综合型人才&#xff0c;才是技术团队中的绝对核心。 不仅仅是架构师&#xff0c;所有的技术高端岗位&#xff0c;对人才的综合能力都有较高的标准。 架构路线的总设计师 规…...

Java:SpringBoot实现ApplicationEvent事件的监听和发布

通过发布订阅模式实现数据的异步处理&#xff0c;比如异步处理邮件发送 新建SpringBoot项目 项目结构 . ├── pom.xml └── src└── main├── java│ └── com│ └── example│ └── demo│ ├── Application.java│ …...

星戈瑞-Sulfo-Cyanine3 azide?磺酸基-Cy3-N3叠氮基水溶性染料

Sulfo-Cyanine3 azide&#xff1f; 品牌&#xff1a;星戈瑞 CAS号&#xff1a;2055138-89-9 外观&#xff1a; 暗红色晶体 分子量&#xff1a;720.83 分子式&#xff1a;C34H45N6NaO8S2 纯度&#xff1a;95% 储藏条件&#xff1a;-20C 下避光保存 Sulfo-Cyanine3 azide 是一种…...

十大经典排序算法(下)

&#x1f353;个人主页&#xff1a;bit.. &#x1f352;系列专栏&#xff1a;Linux(Ubuntu)入门必看 C语言刷题 数据结构与算法 HTML和CSS3 目录 1.6 快速排序 1. 算法步骤 2. 动图演示 3.代码实现 1.7 堆排序 1. 算法步骤 2. 动图演示 3. 代码实现 1.8 计数排…...

网络协议分析期末复习(四)

目录 0.前言 1.IP层对改善TCP性能支持的机制 2.TCP防止半开放连接的机制 3.TCP协议中强推位&#xff08;P&#xff09;和紧急位&#xff08;U&#xff09;的用法 4.TCP的流量控制和拥塞控制的异同点 异&#xff1a; &#xff08;1&#xff09;两者的特点不同&#xff1a;…...

Matlab对图像和视频的简单处理(图像视频文件读取和输出,转灰度图,取指定帧的图像)

文章目录1.图像文件的读取2.图像效果展示3.将彩色图转换为灰度图4.视频文件的读取5.读取视频中指定帧的图像6.图片文件的报错1.图像文件的读取 语法介绍&#xff1a; A imread(filename) A imread(filename, fmt)参数介绍&#xff1a; filename&#xff1a;要读取的图像文…...

ArrayList源码分析

ArrayList源码分析目标:一、 ArrayList的简介二、ArrayList原理分析2.1 ArrayList的数据结构源码分析2.2 ArrayList默认容量&最大容量2.3 为什么ArrayList查询快&#xff0c;增删慢&#xff1f;2.4 ArrayList初始化容量1、创建ArrayList对象分析&#xff1a;无参数2、创建A…...

SpringBoot IOC、DI、@Autowired、@Resource、作用域

一、初识Spring1.1 Spring是什么Spring是一个轻量级Java开发框架&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的开源框架&#xff0c;为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构&#xff0c;Java开发者可以专…...

链表相关oj题

1.Leetcode203 移除链表元素 解题思路&#xff1a;从头节点开始进行元素删除&#xff0c;每删除一个元素&#xff0c;需要重新链接节点 struct ListNode* removeElements(struct ListNode* head, int val){struct ListNode*dummyheadmalloc(sizeof(struct ListNode));dummyhea…...

【Linux】操作系统(Operator System)

操作系统&#xff08;Operator System &#xff09;一、操作系统的概念二、操作系统的作用三、系统调用和库函数一、操作系统的概念 操作系统是一组控制和管理计算机软硬件资源&#xff0c;为用户提供便捷使用的计算机程序的集合&#xff0c;是配置在计算机硬件系统上的第一层…...

机器学习自学笔记——感知机

感知机预备知识 神经元 ​ 感知机算法最初是由科学家从脑细胞的神经凸起联想而来。如下图&#xff0c;我们拥有三个初始xxx值&#xff0c;x1,x2,x0x_1,x_2,x_0x1​,x2​,x0​。其中x01x_01x0​1为一个初始的常量&#xff0c;专业上称作“偏置”。每个xxx的值都会乘上一个权重…...

C++ Primer第五版_第三章习题答案(21~30)

文章目录练习3.21练习3.22练习3.23练习3.24练习3.25练习3.26练习3.27练习3.28练习3.29练习3.30练习3.21 请使用迭代器重做3.3.3节的第一个练习。 #include <vector> #include <iterator> #include <string> #include <iostream>using std::vector; usi…...

colmap+openmvs进行三维重建流程全记录

window下的colmapopenmvs进行三维重建流程全记录 1.colmap安装与配置 可参考&#xff1a;https://blog.csdn.net/weixin_44153180/article/details/129334018?spm1001.2014.3001.5501 2.openmvs安装与配置 可参考&#xff1a;https://blog.csdn.net/rdw1246010462/article…...

yolov8命令行运行参数详解

序言 整理来自yolov8官方文档常用的一些命令行参数&#xff0c;官方文档YOLOv8 Docs yolov8命令行的统一运行格式为&#xff1a; yolo TASK MODE ARGS其中主要是三部分传参&#xff1a; TASK(可选) 是[detect、segment、classification]中的一个。如果没有显式传递&#xf…...

分布式锁简介

Redis因为单进程、性能高常被用于分布式锁&#xff1b;锁在程序中作用是同步工具&#xff0c;保证共享资源在同一时刻只能被一个线程访问。 Java中经常用的锁synchronized、Lock&#xff0c;但是Java的锁智能保证单机的时候有效&#xff0c;分布式集群环境就无能为力了&#xf…...

【嵌入式Linux学习笔记】Linux驱动开发

Linux系统构建完成后&#xff0c;就可以基于该环境方便地进行开发了&#xff0c;相关的开发流程与MCU类似&#xff0c;但是引入了设备树的概念&#xff0c;编写应用代码要相对复杂一点。但是省去了很多配置工作。 学习视频地址&#xff1a;【正点原子】STM32MP157开发板 字符…...

2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛)(H题)(线段树)

又到了万物复苏的季节&#xff0c;家乡的苹果树结果了。像往常一样小龙同学被叫回家摘苹果。 假设需要采摘的一棵树上当前有a颗苹果&#xff0c;那么小龙会采摘⌈a/3⌉颗苹果&#xff0c;其中⌈x⌉表示不小于x的最小整数。 但是&#xff0c;为了可持续发展&#xff0c;若a小于1…...

Linux内核Thermal框架详解十三、Thermal Governor(3)

接前一篇文章Linux内核Thermal框架详解十二、Thermal Governor&#xff08;2&#xff09; 二、具体温控策略 上一篇文章介绍并详细分析了bang_bang governor的源码。本文介绍第2种温控策略&#xff1a;fair_share。 2. fair_share fair_share governor总的策略是频率档位⽐较…...

TikTok品牌出海创世纪(二)

目录 1.推荐算法打造王者品牌 2.品牌聚焦海外Z群体 3.持续扩展应用场景 加速品牌全球化传播 品牌聚焦海外Z群体 “这个地球上&#xff0c;三分之二的人都在用Facebook“&#xff0c;这是对Facebook曾经统治地位最直观的描述。 但如今&#xff0c;这家全球社交媒体巨头的光环正…...

iOS中SDK开发 -- cocoapods库创建

在iOS项目中&#xff0c;经常使用cocoadpods来进行依赖管理以及三方库引入等。引入的三方库一般会有几种形式&#xff1a;一、在Pods目录下可以直接看到源代码的开源库&#xff0c;如AFNetworking&#xff0c;Masonry等常见开源库。二、在Pods目录下拉取的项目文件只能看到对应…...

2023年了,还是没学会内卷....

先做个自我介绍&#xff1a;我&#xff0c;普本&#xff0c;通信工程专业&#xff0c;现在飞猪干软件测试&#xff0c;工作时长两年半。 回望疫情纪元&#xff0c;正好是实习 毕业这三年。要说倒霉也是真倒霉&#xff0c;互联网浪潮第三波尾巴也没抓住&#xff0c;狗屁造富神…...

chatGPT爆火,什么时候中国能有自己的“ChatGPT“

目录 引言 一、ChatGPT爆火 二、中国何时能有自己的"ChatGPT" 三、为什么openai可以做出chatGPT? 四、结论 引言 随着人工智能技术的不断发展&#xff0c;自然语言处理技术也逐渐成为了研究的热点之一。其中&#xff0c;ChatGPT作为一项领先的自然语言处理技术…...

【Matlab算法】粒子群算法求解一维非线性函数问题(附MATLAB代码)

MATLAB求解一维非线性函数问题前言正文函数实现&#xff08;可视化处理&#xff09;可视化结果前言 一维非线性函数是指函数的自变量和因变量都是一维实数&#xff0c;而且函数的形式是非线性的&#xff0c;也就是不符合线性函数的形式。在一维非线性函数中&#xff0c;自变量…...

2023 最新发布超全的 Java 面试八股文,整整 1000道面试题,太全了

作为一名优秀的程序员&#xff0c;技术面试都是不可避免的一个环节&#xff0c;一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识。 2023 年的互联网行业竞争越来越严峻&#xff0c;面试也是越来越难&#xff0c;很多粉丝朋友私信希望我出一篇面试专题或…...

产品经理面经|当面试官问你还有什么问题?

相信很多产品经理在跳槽面试的时候&#xff0c;在面试尾声都会遇到这样的环节&#xff0c;面试官会问你有什么问题要问的&#xff0c;一般来说大家都能随时随地甩出几个问题来化解&#xff0c;但其实在这个环节对于应聘者来说也是一个很好的机会来展现自己的能力&#xff0c;甚…...

单链表的基本操作

目录 一.链表的基本概念和结构 二.链表的分类 三.单链表的基本操作 1.创建一个节点 2.打印 3.尾插 4.头插 5.尾删 6.头删 7.查找 8.指定位置插入 9.指定位置删除 10.销毁 一.链表的基本概念和结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结…...

【微信小程序-原生开发】系列教程目录(已完结)

01-注册登录账号&#xff0c;获取 AppID、下载安装开发工具、创建项目、上传体验 https://sunshinehu.blog.csdn.net/article/details/128663679 02-添加全局页面配置、页面、底部导航 https://sunshinehu.blog.csdn.net/article/details/128705866 03-自定义底部导航&#x…...

JavaEE--Thread 类的基本用法(不看你会后悔的嘿嘿)

Thread类是JVM用来管理线程的一个类,换句话说,每个线程都唯一对应着一个Thread对象. 因此,认识和掌握Thread类弥足重要. 本文将从 线程创建线程中断线程等待线程休眠获取线程实例 等方面来进行具体说明. 1)线程创建 方法1:通过创建Thread类的子类并重写run () 方法 class M…...

微信公众号(网站建设)合同/亚马逊alexa

转载于:https://www.cnblogs.com/liying123/p/5268796.html...

wordpress多用户商城/数据分析师要学什么

本文收集整理关于python如何解一元二次方程的相关议题&#xff0c;使用内容导航快速到达。 内容导航&#xff1a; Q1&#xff1a;python 使用try except解一元二次方程问题 12345678910111213141516171819报错UnboundLocalError:localvariableareferencedbeforeassignment这个报…...

如何设计个人网站/关键词搜索数据

在华为mate40没有正式发布之前&#xff0c;当下话题最热的机型就是iPhone12了&#xff0c;四款手机也是分开时间段发布&#xff0c;目前6299元的基础版iPhone12人气最高&#xff0c;眼下也没有任何一款国产手机可以抗衡苹果5G手机&#xff0c;实在要找出一款可能就是接下来的华…...

qq营销/东莞网络优化公司

一大早&#xff0c;U-Mail客服张小姐就被电话催得迅速进入工作状态&#xff0c;原来一位客户心急火燎的说邮件往外界投递失败&#xff0c;但不知什么原因&#xff1f;张小姐迅速联系到客户专享技术工程师刘工&#xff0c;迅速对客户进行远程诊断&#xff0c;即刻排除了故障&…...

企业网站建站技术/谷歌浏览器下载手机版

加载是类加载过程的第一个阶段&#xff08;需要区分类加载与加载&#xff09;.在加载阶段&#xff0c;虚拟机主要完成3件事 ——通过一个类的全限定名获取此类的二进制字节流——将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构——在内存中生成一个代表这个类…...

河池公司做网站/网站优化外包价格

一、Postman背景介绍1. Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件2. 可以在开发或者调试网络程序或者是网页B/S模式时来跟踪网页请求二、Postman的操作环境postman适用于不同的操作系统&#xff0c;Postman Mac、Windows X32、Windows X64、Linux系统&am…...