C语言笔记之结构体第二篇

文章目录

一、结构体的声明

结构体的每个成员可以是不同类型的变量

  1. 结构成员的类型:标量/数组/指针/其他结构体
  2. 结构体变量的定义和初始化
c 复制代码
    // 声明结构体类型的同时定义变量p1,p1是全局变量
    struct Point
    {
        int x;
        int y;
    } p1; // 注意 ; 不要忘记了

    struct Node
    {
        int data;
        struct Point p;
        struct Node *next; // 一个struct Node类型的指针变量,变量名叫next
    };

    int main()
    {
        struct Point p2;            // 定义结构体变量p2,此时p2是局部变量,作用范围是main()函数
        struct Point p3 = {20, 18}; // 初始化
        struct Node n = {20, {12, 15}, NULL};
        return 0;
    }

二、结构体成员的访问&结构体传参

  1. 结构体对象.成员变量
  2. 结构体指针 ->成员变量
  3. 嵌套结构体:外层是指针,内层是变量 ptr -> obj.member
  4. 嵌套结构体:外层是指针,内层也是指针ptr -> ptr2 -> member
  5. 结构体传参时要传结构体的地址,这样可以避免当结构体过大,参数压栈的的系统开销比较大,导致性能的下降
c 复制代码
struct Point
    {
        int x;
        int y;
    }; 
    struct Node
    {
        int data;
        struct Point p;
        struct Node *next; // 一个struct Node类型的指针变量,变量名叫next
    };

    // 结构体对象.成员变量
    void print1(struct Node n)
    {
        printf("%d %d %d %p\n", n.data, n.p.x, n.p.y, n.next);
    }
    // 结构体指针 ->成员变量
    void print2(struct Node *pn)
    {
        // 注意这里的pn->p.x, pn->p.y写法
        // 嵌套结构体:外层pn是指针,内层p是变量
        // 结构体指针找成员变量用->
        // 结构体变量找成员变量用.
        printf("%d %d %d %p\n", pn->data, pn->p.x, pn->p.y, pn->next);
    }
    int main()
    {
        struct Node n = {20, {12, 15}, NULL};
        print1(n);//传结构体
        print2(&n);//传地址
        return 0;
    }
相关推荐
峥嵘life13 小时前
Android WiFi 热点 Channel 信道 和 Frequency 频率 转换总结
android·开发语言
wgego13 小时前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
冻柠檬飞冰走茶13 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
stevenseahang14 小时前
C语言标准演化史:从K&R到GNU,谁才是正统?
c语言·gnu·可移植性·标准演化·ansic
山峰哥14 小时前
数据库工程与SQL调优:从慢查询到秒级响应的实战之路
java·开发语言·数据库·sql·深度优先·启发式算法
wangjialelele14 小时前
Selenium4 + Java Web自动化测试入门指南:从环境搭建到常用操作详解
java·开发语言·前端·测试工具·自动化
Awna15 小时前
Golang 大小写可见性规范
开发语言·后端·golang
别动我齐刘海15 小时前
Day6 unitree_G1人形机器人GMR—— MotionInput
c语言·c++·人工智能·学习·机器学习·机器人·github
AI科技星15 小时前
曲率‑挠率与 $\boldsymbol{\omega/c}$ 的关系、精算验证及其物理意义
c语言·开发语言·线性代数·算法·决策树·机器学习·ai科技星
鹿角片ljp16 小时前
Java框架篇:Spring + SpringMVC + SpringBoot + MyBatis深度复习
java·开发语言