C语言——结构体

一、结构的基础知识

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

二、结构的声明

struct tag
{member-list;
}variable-list;

描述一个学生:

typedef struct Student
{char name[20]; //姓名int age; //年龄char sex; //性别char id[20]; //学号
}
Student;

三、结构成员的类型

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

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

有了结构体类型,如何定义变量。

struct Point
{int x;int y;
}p1;//结构体类型的同时定义变量p1。
struct Point p2;//结构体类型的同时定义变量p2。// 初始化定义变量的同时赋初值。
struct Point p3 = {x,y};struct Student // 类型声明{char name[20]; //名字int age;      //年龄};struct Student stu = {"张三", 20};// 结构体变量的初始化。struct Node{int data;struct Node *next;}n1 = {10,{4,5},NULL};// 结构体嵌套的初始化。struct Node n2 = {20,{5,6},NULL};// 结构体嵌套的初始化。

四、结构体成员的访问

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

struct Student
{char name[20];int age;
};
struct Student s;

如何访问s的成员?如下:

struct S s;
strcpy (s.name,"张三");
s.age=18; //使用.运算符访问结构体成员变量
  • 结构体指针访问指向变量的成员,有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针

因此,我们需要使用->运算符来如何访问成员。

struct Student
{char name[20];int age;
};
void printf_student(struct Student *s)
{printf("姓名:%s 年龄:%d\n",(*s)name,(*s).age);//使用结构体指针访问成员变量printf("姓名:%s 年龄:%d\n",s->name,s->age);
}
int main()
{struct Student s={"张三",18};printf(&s);return 0;
}

五、结构体传参

#include<stdio.h>
struct Student
{char name[20];int age;
};
//结构体传参
void printf1(struct Student s)
{printf("姓名:%s 年龄:%d\n",s.name,s.age);
}
//结构体地址传参
void printf2(struct Student *s)
{printf("姓名:%s 年龄:%d\n",s->name,s->age);
}
int main()
{struct Student s={"张三",18};printf1(s);printf2(&s);return 0;
}

可见printf2函数好些,原因:       

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

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

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

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

相关文章

Symfony DomCrawler 库爬取图片实例

前言 在当今互联网时代&#xff0c;网络爬虫技术已经成为信息获取和数据分析的重要工具之一。本文将详细介绍如何利用Symfony DomCrawler库&#xff0c;结合代理设置和HTML内容解析&#xff0c;实现对搜狐网站图片的爬取&#xff0c;并展示实际代码和效果。 项目需求 本项目…

微信小程序游戏:移动游戏市场的新兴力量

随着移动互联网的迅猛发展&#xff0c;微信小程序游戏已经成为现代数字娱乐领域的一股不可忽视的力量。这些游戏通过融入微信这一广泛使用的社交平台&#xff0c;为用户带来了全新的游戏体验。本文探讨了微信小程序游戏的特点、发展现状和未来趋势。 微信小程序游戏最大的特点之…

css的元素显示模式(有单行文字垂直居中,侧边栏等案例)

目录 1. 什么是元素的显示模式 2. 元素显示模式的类型 块元素 行内元素 行内块元素 3. 元素显示模式的转换 4.文字垂直居中 5.具体实现案例 1. 什么是元素的显示模式 定义&#xff1a;元素显示模式就是元素&#xff08;标签&#xff09;以什么方式进行显示&#xff0c;…

Property ‘unmount‘ does not exist on type ‘Window typeof globalThis‘

在 Vue3 Vite TS 的项目中&#xff0c;接入 MicroApp 微前端时&#xff0c;编辑器出现 TS2339: Property unmount does not exist on type Window & typeof globalThis. 的错误提示。 问题原因 在 window 上挂载了一个 unmount 方法&#xff0c;但是 TS 并不知道这个方法…

PyTorch: 基于VGG16处理MNIST数据集的图像分类任务

目录 引言在Conda虚拟环境下安装pytorch步骤一&#xff1a;利用代码自动下载mnist数据集步骤二&#xff1a;搭建基于VGG16的图像分类模型步骤三&#xff1a;训练模型步骤四&#xff1a;测试模型运行结果后续模型的优化和改进建议完整代码结束语 引言 在本博客中&#xff0c;小…

猎豹浏览器如何设置ip使用?socks5在网络安全中有什么优势?

猎豹浏览器如何设置ip使用&#xff1f;socks在网络安全中有什么优势&#xff1f; 一、猎豹浏览器如何设置ip使用&#xff1f; 在使用猎豹浏览器时&#xff0c;可以通过以下步骤来设置IP使用&#xff1a; 1. 打开猎豹浏览器&#xff0c;点击右上角的“菜单”按钮&#xff0c;在…

软文是如何连接品牌与用户的?媒介盒子为您解答

软文作为品牌向用户传递信息或价值传递的重要媒介&#xff0c;在品牌营销中的场景中发挥着重要作用。那么商家如何做&#xff0c;才能使软文成功连接品牌与用户呢&#xff1f;下面就让媒介盒子分享。 一、软文是什么 软文是一种带有目的的表达&#xff0c;软文目的大概分为四种…

c++ map

unordered_map #include <iostream> #include <string> #include <unordered_map>int main() {// 创建包含三个字符串的&#xff08;映射到字符串的&#xff09;unordered_mapstd::unordered_map<std::string, std::string> u {{"red", &qu…

C语言普里姆(Prim)算法实现计算国家建设高铁运输网最低造价的建设方案

背景&#xff1a; 描述&#xff1a;为促进全球更好互联互通&#xff0c;亚投行拟在一带一路沿线国家建设高铁运输网&#xff0c;请查阅相关资料 画出沿线国家首都或某些代表性城市的连通图&#xff0c;为其设计长度最短或造价最低的高铁建设方案。 要求&#xff1a;抽象出的图…

智能优化算法应用:基于鸡群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鸡群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鸡群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鸡群算法4.实验参数设定5.算法结果6.参考文献7.MA…

kubernetes(k8s) Yaml 文件详解

YAML格式&#xff1a;用于配置和管理&#xff0c;YAML是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读。 1、查看API 资源版本标签 kubectl api-versions 2、编写资源配置清单 kubectl create -f nginx-test.yaml --validatefalse 2.3 查看创建的po…

讲解充电桩测试项目

充电桩测试项目是为了保证充电桩的质量和安全性&#xff0c;对充电桩进行全面、系统的检测和评估。功能测试是充电桩测试的基础&#xff0c;主要检查充电桩的各项功能是否正常。包括充电接口连接测试、充电过程控制测试、充电状态显示测试等。通过功能测试&#xff0c;可以确保…