C语言初阶:十.结构体基础

♥感谢您阅读本篇文章,文章内容为个人对所学内容的整理总结,欢迎大佬在评论区指点一二。♥

♥个人主页:折枝寄北-CSDN博客折枝寄北擅长C语言初阶,等方面的知识,折枝寄北关注python,c++,java,qt,c语言领域.https://blog.csdn.net/2303_80170533?type=blog

♥文章所属专栏:C语言初阶-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/2303_80170533/category_12794764.html?spm=1001.2014.3001.5482

1. 结构体的声明

1.1 结构的基础知识

概念:结构体(struct)是由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员”,其描述了一块内存区间的大小及解释意义。结构体通常用来表示类型不同但是又相关的若干数据。

特性
自定义性:结构体类型不是由系统定义好的,而是需要程序设计者自己定义。
组合性:结构体可以包含不同类型的数据成员,这些数据成员可以是基本数据类型(如int、char等)、指针、数组或其他结构体类型。
封装性:结构体可以将多个相关的数据成员封装在一起,形成一个新的类型,方便日后的使用和管理。

1.2 结构的声明

在C语言中,可以使用struct关键字来定义结构体。定义结构体的基本语法如下:

//结构体的声明
struct Stu
{
    //结构体成员
    char name[20];
    int age;
    char sex[10];
    float score;
}s4,s5;//声明的同时,定义s4和s5也是结构体变量

1.3 结构成员的类型

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

int main()
{
    //struct Stu s1, s2, s3;//结构体变量s1,s2,s3-局部的
    struct Stu s1 = { "zhangsan",20,"nan",99.5f };//初始化
    struct Stu s2 = { "lisi",19,"nan",66.5f };//初始化
    printf("%s %d  %s  %.1f\n", s2.name, s2.age, s2.sex, s2.score);
    return 0;
}

1.4 结构体变量的定义和初始化

int main()
{
    //struct Stu s1, s2, s3;//结构体变量s1,s2,s3-局部的
    struct Stu s1 = { "zhangsan",20,"nan",99.5f };//初始化
    struct Stu s2 = { "lisi",19,"nan",66.5f };//初始化
    printf("%s %d  %s  %.1f\n", s2.name, s2.age, s2.sex, s2.score);
    return 0;
}
//结构体允许嵌套定义

2. 结构体成员的访问

结构体变量访问成员 :结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。

struct S s;

strcpy(s.name, "zhangsan");//使用.访问name成员

s.age = 20;//使用.访问age成员

结构体指针访问指向变量的成员 有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。 那该如何访问成员。

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

void print(struct Stu* ps)

{ printf("name = %s   age = %d\n", (*ps).name, (*ps).age);    //使用结构体指针访问指向对象的成员

printf("name = %s   age = %d\n", ps->name, ps->age);

}

int main()

{

struct Stu s = {"zhangsan", 20};    

print(&s);//结构体地址传参    

return 0;

}

3. 结构体传参

struct S { int data[1000]; int num; };

struct S s = {{1,2,3,4}, 1000}; //结构体传参

void print1(struct S s)

        { printf("%d\n", s.num); } //结构体地址传参

void print2(struct S* ps)

        { printf("%d\n", ps->num); }

int main()

{

        print1(s);  //传结构体

        print2(&s); //传地址

        return 0;

}

上面的 print1 和 print2 函数哪个好些?

答案是:首选print2函数。

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

结论: 结构体传参的时候,要传结构体的地址。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT仿QQ聊天项目,第一节,创建项目并布置编辑登录界面

目录 一,创建项目 二,编辑登录界面 1,登录界面整体构造 2,登录界面的宽高 3,登录界面使用到的控件 4,登录界面中的控件所在的位置和大小 (1)qq图标label位置和大小 &#xff0…

《计算机原理与系统结构》学习系列——处理器(中)

系列文章目录 目录 流水线数据通路与控制概述5个流水级指令周期与流水级 流水线性能流水线时钟周期的长度T和数量cycles流水线性能 流水线数据通路流水线寄存器流水线分析图形化流水线流水线控制 流水线数据通路与控制 概述 5个流水级 指令周期与流水级 单周期实现中&#x…

【JavaEE】【多线程】volatile,wait/notify

目录 一、volatile关键字1.1 内存可见性1.2 volatile解决内存可见性问题 二、wait和notify2.1 wait2.2 notify2.3 使用例子2.3.1 例子12.3.2 例子二 一、volatile关键字 volatile可以保证内存可见性,只能修饰变量。 1.1 内存可见性 在前面介绍线程不安全原因时介…

C语言[求x的y次方]

C语言——求x的y次方 这段 C 代码的目的是从用户输入获取两个整数 x 和 y ,然后计算 x 的 y 次幂(不过这里有个小错误,实际计算的是 x 的 (y - 1) 次幂,后面会详细说),最后输出结果。 代码如下: #include…

银河麒麟V10通过tigervnc实现远程桌面和windows系统连接

1、查看系统版本:uname -a Linux localhost.localdomain 4.19.90-89.16.v2401.ky10.x86_64 #1 SMP Sat Sep 14 13:09:47 CST 2024 x86_64 x86_64 x86_64 GNU/Linux 2、查看是否具有桌面环境:yum grouplist 安装VNC需要具有桌面环境 3.、安装tigervnc: yum install tigervnc…

Linux基础命令(五) 之 cat,head,tail,more,less,grep

目录 一,浏览普通文件内容 二,过滤文件内容显示--grep 参数及其作用 ​编辑 常见用法 一,浏览普通文件内容 注意:以上命令均可以结合管道符一起使用 二,过滤文件内容显示--grep 在指定的普通文件中查找并显示含有…

vue写个表格,让它滚动起来,没有用datav,有的时候结合会出错,一种简单的方法,直接用animation

表格样式就先不说了哈,这些简单内容,如果粉丝朋友还有什么问题,可以私信 好啦,首先,第一步 1.在目录的这个地方创建文件夹css,里面放两个文件 . 第一个文件里面内容 第二个文件里面内容 .drawCur{ curs…

VR在线展厅重塑展览新维度,引领沉浸式科技体验与漫游新时代

一、VR在线展厅开启数字展览新篇章 VR在线展厅将传统的实体展览空间转化为数字化的虚拟环境。参观用户只需使用手机、平板、电脑等设备就能瞬间穿越至虚拟展厅中,身临其境地浏览各类展品。这种前所未有的科技体验不仅让参观者感受到了数字技术的魅力,更极…

JS实现警灯效果红蓝闪烁

代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>警灯效果红蓝闪烁</title&…

【WiFi7】 支持wifi7的手机

数据来源 Smartphones with WiFi 7 - list of all latest phones 2024 Motorola Moto X50 Ultra 6.7" 1220x2712 Snapdragon 8s Gen 3 16GB RAM 1024 GB 4500 mAh a/b/g/n/ac/6e/7 Sony Xperia 1 VI 6.5" 1080x2340 Snapdragon 8 Gen 3 12GB RAM 512 G…

web服务实验

http实验 先创建需要访问的web页面文件index.html 编辑vim /etc/nginx/conf.d/testip.conf 测试通过域名访问需要编辑/etc/hosts 如果通过windows的浏览器访问需要编辑下面的文件通过一管理员身份打开的记事本编辑 C:\Windows\System32\drivers\etc下的hosts文件 192.168.1…

Kubernetes运行大数据组件-设计思路

环境说明 在Kubernetes集群添加三个节点作为大数据测试服务节点&#xff1a; NAME STATUS ROLES AGE VERSION bigdata199056 Ready worker 2d3h v1.20.6 bigdata199057 Ready worker 2d5h v1.20.6 bigdata199058 Ready work…

Maven的依赖

一、依赖的基本配置 根元素project下的dependencies可以包含多个 dependence元素&#xff0c;以声明多个依赖。每个依赖都应 该包含以下元素&#xff1a; 1. groupId, artifactId, version : 依赖的基本坐标&#xff0c; 对于任何⼀个依赖来说&#xff0c;基本坐标是最…

前端聊天室页面开发(赛博朋克科技风,内含源码)

肝了一天&#xff0c;经过各种处理美化&#xff0c;肝出来了一个赛博朋克科技风的前端页面&#xff0c;用的原生三件套htmlcssjavascript开发的&#xff0c;本来想是加点功能调用一下gpt接口&#xff0c;但是基本都需要webscoket通信&#xff0c;可惜我js学的不是很深入&#x…

使用Vue.js构建响应式Web应用

&#x1f496; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4bb; Gitee主页&#xff1a;瑕疵的gitee主页 &#x1f680; 文章专栏&#xff1a;《热点资讯》 使用Vue.js构建响应式Web应用 1 引言 2 Vue.js简介 3 安装Vue CLI 4 创建Vue项目 5 设计应用结构 6 创建组件 7 使用…

C++——string的模拟实现(下)

目录 成员函数 3.4 修改操作 (3)insert()函数 (4)pop_back()函数 (5)erase()函数 (6)swap()函数 3.5 查找操作 (1)find()函数 (2)substr()函数 3.6 重载函数 (1)operator赋值函数 (2)其他比较函数 (3)流插入和流提取 完整代码 结束语 第一篇链接&#xff1a;C——…

基于Springboot无人驾驶车辆路径规划系统(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

【大模型】Ollama+WebUI+AnythingLLM搭建本地知识库

目录 1 部署Ollama 1.1 下载镜像ollama 1.2 运行ollama 1.3 验证 2 模型选型 3 安装模型 3.1 选择模型安装 3.2 删除模型(选看) 4 安装webUI 4.1 拉镜像 4.2 启动服务 5 访问 5.1 注册 5.2 登录 5.3 设置 6 使用 7 使用api来调用 8 安装AnythingLLM搭建本地…

27.9 调用go-ansible执行playbook拷贝json文件重载采集器

本节重点介绍 : go-ansible执行playbook编写分发重载的playbook编译执行 测试停掉一个节点测试停掉的节点再回来 go-ansible执行playbook 新增 goansiblerun/run.go package goansiblerunimport ("context""github.com/apenella/go-ansible/pkg/execute&qu…

Python基础学习(四)程序控制结构

代码获取&#xff1a;https://github.com/qingxuly/hsp_python_course 完结版&#xff1a;Python基础学习完结版 程序控制结构 程序流程控制介绍 基本介绍 程序流程控制绝对程序是如何执行的&#xff0c;是我们必须掌握的&#xff0c;主要有三大流程控制语句。顺序控制、分支…