C语言:结构体

一,结构体

  • C语⾔已经提供了内置类型,如:char、short、int、long、float、double等,但是只有这些内置类型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。
  • 描述⼀个学⽣需要名字、年龄、学号、⾝⾼、体重等;
  • 描述⼀本书需要作者、出版社、定价等。C语⾔为了解决这个问题,增加了结构体这种⾃定义的数据类型,让程序员可以⾃⼰创造适合的类型。
    :结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量,如: 标量、数组、指针,甚⾄是其他结构体。

    1. 结构体的定义

    结构体的定义使用 struct 关键字,其基本语法如下:

    struct 结构体名 {数据类型 成员1;数据类型 成员2;// 可以有更多成员
    }variable-list;

    例如,定义一个表示学生信息的结构体:

    struct Student {char name[50];int age;float score;
    }variable-list;

    述代码定义了一个名为 Student 的结构体,它包含三个成员:一个字符数组 name 用于存储学生姓名,一个整型变量 age 用于存储学生年龄,一个浮点型变量 score 用于存储学生成绩。

    2. 结构体变量的声明

    定义好结构体后,可以声明该结构体类型的变量。有以下几种声明方式:

    方式一:先定义结构体,再声明变量
    struct Student 
    {char name[50];int age;float score;
    };int main() 
    {struct Student stu1; // 声明一个 Student 类型的变量 stu1return 0;
    }
    方式二:在定义结构体的同时声明变量
    struct Student{char name[50];int age;float score;
    } stu2; // 声明一个 Student 类型的变量 stu2int main(){// 使用 stu2return 0;
    }
    方式三:使用匿名结构体声明变量(匿名结构体声明变量只能声明一个
    struct 
    {char name[50];int age;float score;
    } stu3; // 声明一个匿名结构体类型的变量 stu3int main() 
    {// 使用 stu3return 0;
    }

    3. 结构体变量的初始化

     

    结构体变量可以在声明时进行初始化,有以下几种初始化方式:

    方式一:按成员顺序初始化
    #include <stdio.h>struct Student 
    {char name[50];int age;float score;
    };int main() 
    {struct Student stu = {"Alice", 20, 85.5};printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", stu.name, stu.age, stu.score);return 0;
    }
    方式二:指定成员初始化
    #include <stdio.h>struct Student 
    {char name[50];int age;float score;
    };int main() 
    {struct Student stu = {.name = "Bob", .score = 90.0, .age = 21};printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", stu.name, stu.age, stu.score);return 0;
    }

    4. 结构体成员的访问

    可以使用点运算符(.)来访问结构体变量的成员。例如:

    #include <stdio.h>
    #include <string.h>struct Student{char name[50];int age;float score;
    };int main(){struct Student stu;strcpy(stu.name, "Charlie");stu.age = 19;stu.score = 78.5;//    结构体变量.结构体成员名printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", stu.name, stu.age, stu.score);return 0;
    }

    5.结构体数组

    结构体数组是由多个相同结构体类型的元素组成的数组。例如:

    #include <stdio.h>struct Student 
    {char name[50];int age;float score;
    };int main() {struct Student students[3] = {{"David", 22, 88.0},{"Eve", 20, 92.5},{"Frank", 21, 76.0}};for (int i = 0; i < 3; i++) 
    {printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", students[i].name, students[i].age, students[i].score);}return 0;
    }

    6. 结构体指针

    可以定义指向结构体的指针,通过指针访问结构体成员时需要使用箭头运算符(->)。例如:

    #include <stdio.h>
    #include <string.h>struct Student 
    {char name[50];int age;float score;
    };int main() 
    {struct Student stu = {"Grace", 23, 89.5};struct Student *p = &stu;printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", p->name, p->age, p->score);return 0;
    }

    7. 结构体作为函数参数

    结构体可以作为函数的参数进行传递,有值传递和地址传递两种方式。

    值传递
    #include <stdio.h>struct Point 
    {int x;int y;
    };// 函数接受结构体值作为参数
    void printPoint(struct Point p) 
    {printf("坐标: (%d, %d)\n", p.x, p.y);
    }int main() 
    {struct Point pt = {3, 5};printPoint(pt);return 0;
    }
    地址传递
    #include <stdio.h>struct Point 
    {int x;int y;
    };// 函数接受结构体指针作为参数
    void modifyPoint(struct Point *p) 
    {p->x = 10;p->y = 20;
    }int main() 
    {struct Point pt = {3, 5};modifyPoint(&pt);printf("修改后的坐标: (%d, %d)\n", pt.x, pt.y);return 0;
    }

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络 HTTPS 协议原理

概念 HTTPS 也是一个应用层协议&#xff0c;不过 是在 HTTP 协议的基础上引入了一个加密层。因为 HTTP的内容是明文传输的&#xff0c;明文数据会经过路由器、wifi 热点、通信服务运营商、代理服务器等多个物理节点&#xff0c;如果信息在传输过程中被劫持&#xff0c;传输的…

java练习(5)

ps:题目来自力扣 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这…

深入 Rollup:从入门到精通(三)Rollup CLI命令行实战

准备阶段&#xff1a;初始化项目 初始化项目&#xff0c;这里使用的是pnpm&#xff0c;也可以使用yarn或者npm # npm npm init -y # yarn yarn init -y # pnpm pnpm init安装rollup # npm npm install rollup -D # yarn yarn add rollup -D # pnpm pnpm install rollup -D在…

MySQL数据库环境搭建

下载MySQL 官网&#xff1a;https://downloads.mysql.com/archives/installer/ 下载社区版就行了。 安装流程 看b站大佬的视频吧&#xff1a;https://www.bilibili.com/video/BV12q4y1477i/?spm_id_from333.337.search-card.all.click&vd_source37dfd298d2133f3e1f3e3c…

松灵机器人 scout ros2 驱动 安装

必须使用 ubuntu22 必须使用 链接的humble版本 #打开can 口 sudo modprobe gs_usbsudo ip link set can0 up type can bitrate 500000sudo ip link set can0 up type can bitrate 500000sudo apt install can-utilscandump can0mkdir -p ~/ros2_ws/srccd ~/ros2_ws/src git cl…

【最长上升子序列Ⅱ——树状数组,二分+DP,纯DP】

题目 代码&#xff08;只给出树状数组的&#xff09; #include <bits/stdc.h> using namespace std; const int N 1e510; int n, m; int a[N], b[N], f[N], tr[N]; //f[i]表示以a[i]为尾的LIS的最大长度 void init() {sort(b1, bn1);m unique(b1, bn1) - b - 1;for(in…

Linux安装zookeeper

1, 下载 Apache ZooKeeperhttps://zookeeper.apache.org/releases.htmlhttps://zookeeper.apache.org/releases.htmlhttps://zookeeper.apache.org/releases.htmlhttps://zookeeper.apache.org/releases.htmlhttps://zookeeper.apache.org/releases.htmlhttps://zookeeper.apa…

day6手机摄影社区,可以去苹果摄影社区学习拍摄技巧

逛自己手机的社区&#xff1a;即&#xff08;手机牌子&#xff09;摄影社区 拍照时防止抖动可以控制自己的呼吸&#xff0c;不要大喘气 拍一张照片后&#xff0c;如何简单的用手机修图&#xff1f; HDR模式就是让高光部分和阴影部分更协调&#xff08;拍风紧时可以打开&…

linux本地部署deepseek-R1模型

国产开源大模型追平甚至超越了CloseAI的o1模型&#xff0c;大国崛起时刻&#xff01;&#xff01;&#xff01; DeepSeek R1 本地部署指南   在人工智能技术飞速发展的今天&#xff0c;本地部署AI模型成为越来越多开发者和企业关注的焦点。本文将详细介绍如何在本地部署DeepS…

小程序-基础加强-自定义组件

前言 这次讲自定义组件 1. 准备今天要用到的项目 2. 初步创建并使用自定义组件 这样就成功在home中引入了test组件 在json中引用了这个组件才能用这个组件 现在我们来实现全局引用组件 在app.json这样使用就可以了 3. 自定义组件的样式 发现页面里面的文本和组件里面的文…

c语言(关键字)

前言&#xff1a; 感谢b站鹏哥c语言 内容&#xff1a; 栈区&#xff08;存放局部变量&#xff09; 堆区 静态区&#xff08;存放静态变量&#xff09; rigister关键字 寄存器&#xff0c;cpu优先从寄存器里边读取数据 #include <stdio.h>//typedef&#xff0c;类型…

【最长不下降子序列——树状数组、线段树、LIS】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e510; int a[N], b[N], tr[N];//a保存权值&#xff0c;b保存索引,tr保存f&#xff0c;g前缀属性最大值 int f[N], g[N]; int n, m; bool cmp(int x, int y) {if(a[x] ! a[y]) return a[x] < a[…

springboot 启动原理

目标&#xff1a; SpringBootApplication注解认识了解SpringBoot的启动流程 了解SpringFactoriesLoader对META-INF/spring.factories的反射加载认识AutoConfigurationImportSelector这个ImportSelector starter的认识和使用 目录 SpringBoot 启动原理SpringBootApplication 注…

《Origin画百图》之脊线图

1.数据准备&#xff1a;将数据设置为y 2.选择绘图>统计图>脊线图 3.生成基础图形&#xff0c;并不好看&#xff0c;接下来对图形属性进行设置 4.双击图形>选择图案>颜色选择按点>Y值 5.这里发现颜色有色阶&#xff0c;过度并不平滑&#xff0c;需要对色阶进行更…

安卓(android)实现注册界面【Android移动开发基础案例教程(第2版)黑马程序员】

一、实验目的&#xff08;如果代码有错漏&#xff0c;可查看源码&#xff09; 1.掌握LinearLayout、RelativeLayout、FrameLayout等布局的综合使用。 2.掌握ImageView、TextView、EditText、CheckBox、Button、RadioGroup、RadioButton、ListView、RecyclerView等控件在项目中的…

星际智慧农业系统(SAS),智慧农业的未来篇章

新月人物传记&#xff1a;人物传记之新月篇-CSDN博客 相关文章&#xff1a;星际战争模拟系统&#xff1a;新月的编程之道-CSDN博客 新月智能护甲系统CMIA--未来战场的守护者-CSDN博客 “新月智能武器系统”CIWS&#xff0c;开启智能武器的新纪元-CSDN博客 目录 星际智慧农业…

MP4基础

一、什么是MP4&#xff1f; MP4是一套用于音频、视频信息的压缩编码标准&#xff0c;由国际标准化组织&#xff08;ISO&#xff09;和国际电工委员会&#xff08;IEC&#xff09;下属的“动态图像专家组”&#xff08;Moving Picture Experts Group&#xff0c;即MPEG&#xff…

揭秘算法 课程导读

目录 一、老师介绍 二、课程目标 三、课程安排 一、老师介绍 学问小小谢 我是一个热爱分享知识的人&#xff0c;我深信知识的力量能够启迪思考&#xff0c;丰富生活。 欢迎每一位对知识有渴望的朋友&#xff0c;如果你对我的创作感兴趣&#xff0c;或者我们有着共同的兴趣点&…

Visual Studio Code应用本地部署的deepseek

1.打开Visual Studio Code&#xff0c;在插件中搜索continue&#xff0c;安装插件。 2.添加新的大语言模型&#xff0c;我们选择ollama. 3.直接点connect&#xff0c;会链接本地下载好的deepseek模型。 参看上篇文章&#xff1a;deepseek本地部署-CSDN博客 4.输入需求生成可用…

97,【5】buuctf web [极客大挑战 2020]Greatphp

进入靶场 审代码 <?php // 关闭所有 PHP 错误报告&#xff0c;防止错误信息泄露可能的安全隐患 error_reporting(0);// 定义一个名为 SYCLOVER 的类 class SYCLOVER {// 定义类的公共属性 $sycpublic $syc;// 定义类的公共属性 $loverpublic $lover;// 定义魔术方法 __wa…