C语言结构体

1. 结构体的基础与声明

1.1 基础知识

  • 定义: 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量 。
  • 成员类型: 结构的成员可以是标量、数组、指针,甚至是其他结构体 。

1.2 声明语法

cpp 复制代码
struct tag
{
    member-list;
} variable-list;
//关键点: 结构体声明结束的花括号后面,分号不能丢 。

2. 变量的定义与初始化

2.1 变量的定义(两种方式)

定义结构体变量主要有两种方式 :

方式一:在声明类型的同时定义变量

cpp 复制代码
struct Point 
{
    int x;
    int y;
} p1;// 声明类型的同时定义变量p1

方式二:声明类型后,单独定义变量

cpp 复制代码
struct Point p2; // 单独定义结构体变量p2

2.2 变量的初始化

初始化即在定义变量的同时赋初值 。

  • 普通初始化: struct Point p = {10, 20};
cpp 复制代码
struct Stu        //类型声明
{
 char name[15];//名字
 int age;      //年龄
};
struct Stu s = {"zhangsan", 20};
  • 指定成员: struct Stu s = {"zhangsan", 20};

2.3 嵌套初始化

如果结构体中包含另一个结构体,使用嵌套的大括号进行初始化 。

cpp 复制代码
struct Point { int x; int y; };
struct Node { 
    int data; 
    struct Point p; 
    struct Node* next; 
};

struct Node n1 = {10, {4, 5}, NULL};

3. 结构体成员的访问

访问成员主要依据你手里拿的是"变量"还是"指针"。

  • 情况 A:持有结构体变量
    使用 点操作符 (.)
    语法:变量名.成员名
  • 情况 B:持有结构体指针
    使用 箭头操作符 (->)
    语法:指针变量->成员名

4. 结构体传参

在函数传参时,可以选择传值(复制整个结构体)或传址(传递指针)。

  • 传值: void print(struct S s);
  • 传址: void print(struct S* ps);

为什么在处理较大的结构体时,必须首选"传址"而不是"传值"?

核心原因:系统开销(性能)。

函数传参时,参数是需要压栈的。

  • 如果使用传值:当结构体过大时,系统需要开辟大量内存来复制数据,压栈开销大,导致性能下降 。
  • 如果使用传址:无论结构体多大,只需要传递一个指针的大小(4或8字节),开销极小且固定。

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

相关推荐
2401_838472519 小时前
C++模拟器开发实践
开发语言·c++·算法
初九之潜龙勿用9 小时前
C# 操作Word模拟解析HTML标记之背景色
开发语言·c#·word·.net·office
31087487610 小时前
0005.C/C++学习笔记5
c语言·c++·学习
froginwe1110 小时前
MySQL UNION 操作详解
开发语言
ruxshui10 小时前
Python多线程环境下连接对象的线程安全管理规范
开发语言·数据库·python·sql
雨季66610 小时前
Flutter 三端应用实战:OpenHarmony 简易点击计数器与循环颜色反馈器开发指南
开发语言·flutter·ui·ecmascript·dart
望眼欲穿的程序猿10 小时前
Ai8051U+DHT11温湿度!
java·开发语言
xcs1940510 小时前
前端 项目构建问题 \node_modules\loader-runner\lib\loadLoader.js
开发语言·前端·javascript
一人の梅雨10 小时前
VVIC图片搜索接口进阶实战:服装批发场景下的精准识图与批量调度方案
开发语言·机器学习·php
s1hiyu10 小时前
实时控制系统验证
开发语言·c++·算法