结构体嵌套与结构体指针

2023-05-16

struct和typedef struct

首先是结构体的定义格式

分三块来讲述:
  1 首先://注意在C和C++里不同
    在C中定义一个结构体类型要用typedef:
    typedef struct Student
    {
    int a;
    }Stu;
    于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明)
    这里的Stu实际上就是struct Student的别名。Stu==struct Student
    另外这里也可以不写Student(于是也不能struct Student stu1;了,必须是Stu stu1;)
    typedef struct
    {
    int a;
    }Stu;
    但在c++里很简单,直接
    struct Student
    {
    int a;
    };    
    于是就定义了结构体类型Student,声明变量时直接Student stu2;
======================================================================================

  2.其次:
    在c++中如果用typedef的话,又会造成区别:
    struct   Student  
    {  
    int   a;  
    }stu1;//stu1是一个变量  

 
    typedef   struct   Student2  
    {  
    int   a;  
    }stu2;//stu2是一个结构体类型=struct Student  

 
    使用时可以直接访问stu1.a
    但是stu2则必须先   stu2 s2;
    然后               s2.a=10;
======================================================================================

  3 掌握上面两条就可以了,不过最后我们探讨个没多大关系的问题
    如果在c程序中我们写:
    typedef struct  
    {
    int num;
    int age;
    }aaa,bbb,ccc;
    这算什么呢?
    我个人观察编译器(VC6)的理解,这相当于
    typedef struct  
    {
    int num;
    int age;
    }aaa;
    typedef aaa bbb;
    typedef aaa ccc;
    也就是说aaa,bbb,ccc三者都是结构体类型。声明变量时用任何一个都可以,在c++中也是如此。但是你要注意的是这个在c++中如果写掉了typedef关键字,那么aaa,bbb,ccc将是截然不同的三个对象。

    //此处不是很理解。

    typedef struct和struct的区别:

    typedef struct tagMyStruct
    {
     int iNum;
     long lLength;
    } MyStruct;

    上面的tagMyStruct是标识符,MyStruct是变量类型(相当于(int,char等))。

    这语句实际上完成两个操作:

      1) 定义一个新的结构类型

    struct tagMyStruct
    {  
     int iNum;
     long lLength;
    };

  分析:tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,不论是否有typedefstruct 关键字和tagMyStruct一起,构成了这个结构类型,这个结构都存在。

  我们可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一个结构类型。

  2) typedef为这个新的结构起了一个名字,叫MyStruct。

    typedef struct tagMyStruct MyStruct;

  因此,MyStruct实际上相当于struct tagMyStruct,我们可以使用MyStruct varName来定义变量。

结构体嵌套

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct parent1{
    int num;
    char name[30];
    struct son2{
        int age;
        char sname[30];
    }s1;
}Parent2;

struct parent3{
    int num;
    char name[30];
}parr2[2] = { { 5, "父亲5" }, { 6, "父亲6" } };//结构体数组定义初始化二


int main()
{   int i;
    Parent2 p2;
    p2.num = 2;
    sprintf(p2.name, "父亲2");
    p2.s1.age = 13;
    sprintf(p2.s1.sname, "儿子2");
    printf("num=%d;name=%s;age=%d;sname=%s\n", p2.num, p2.name, p2.s1.age, p2.s1.sname);
    for(i=0;i<2;i++)
   {
    printf ("num=%d;name=%s\n",parr2[i].num,parr2[i].name);
   }

}

结构体指针

#include<stdio.h>
#include <stdlib.h>

struct Student
{int num;
char name[20];
float score[3];
float aver;
};

int main()
{
    void output(struct Student stu[]);
    void input(struct Student stu[]);
    struct Student max(struct Student stu[]);
    void print(struct Student stu);
    struct Student example[3];
    struct Student *p=example;
    input(p);
    output(p);
    print(max(p));
    //getchar();    getchar()函数能够捕捉回车符,会影响程序输出效果 
    //getchar();
    return 0;
}

void input(struct Student stu[])
{
    int i;
    printf("请依次输入学生编号,姓名,三个科目成绩:\n");
    for (i=0;i<3;i++)
    {
        scanf("%d %s %f %f %f",&stu[i].num, &stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
        stu[i].aver = (stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
    }
}

struct Student max(struct Student stu[])
{
    int i,m=0;
    for (i = 0;i<3;i++)
    {
        if(stu[i].aver>stu[m].aver) m = i;
    }
    return stu[m];  
}
void output(struct Student stu[])
{
    int i;
    printf ("成绩表:\n");
    for (i=0;i<3;i++)
    {
        printf("学号:%d\n 姓名:%s\n 三门成绩:%5.1f,%5.1f,%5.1f\n 平均成绩:%6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver);
          //getchar();
    }
}

void print(struct Student stu)
{
    printf("成绩最高的学生:\n");
    printf("学号:%d\n 姓名:%s\n 三门成绩:%5.1f,%5.1f,%5.1f\n 平均成绩:%6.2f\n",stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2],stu.aver);
   // getchar();
}

这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

结构体嵌套与结构体指针 的相关文章

  • 【Week8作业 C】班长竞选【SCC缩点】

    题意 xff1a 大学班级选班长 xff0c n个同学均可以发表意见 若意见为A B xff0c 则表示A认为B合适 意见具有传递性 xff0c 即A认为B合适 xff0c B认为C合适 xff0c 则A也认为C合适 共m条意见 xff0c
  • 【Week9作业 A】咕咕东的目录管理器【模拟】

    题意 xff1a 咕咕东的雪梨电脑的操作系统在上个月受到宇宙射线的影响 xff0c 时不时发生故障 xff0c 他受不了了 xff0c 想要写一个高效易用零bug的操作系统 这工程量太大了 xff0c 所以他定了一个小目标 xff0c 从实
  • 【Week12作业 B】必做题-2【模拟】

    题意 xff1a zjm被困在一个三维的空间中 现在要寻找最短路径逃生 xff01 空间由立方体单位构成 zjm每次向上下前后左右移动一个单位需要一分钟 xff0c 且zjm不能对角线移动 空间的四周封闭 zjm的目标是走到空间的出口 是否
  • 【Week12作业 C】必做题-3【动态规划】

    题意 xff1a 东东每个学期都会去寝室接受扫楼的任务 xff0c 并清点每个寝室的人数 每个寝室里面有ai个人 1 lt 61 i lt 61 n 从第i到第j个宿舍一共有sum i j 61 a i 43 43 a j 个人 这让宿管阿
  • selenium重要功能应用

    当使用C 编写爬虫时 xff0c 以下是一些常用的爬虫框架 xff1a AngleSharp xff08 用于HTML解析 xff09 HtmlAgilityPack xff08 用于HTML解析 xff09 ScrapySharp xff
  • 【CSP201809-3】元素选择器【模拟】

    题意 思路 xff1a 用point来存储结构化文档 xff0c 里面string label string id为标签和id xff0c int c为所在层数 xff0c 两个点就为一层 读入结构化文档 xff1a 用getline读入一
  • 【Week14作业 B】Q老师与十字叉【模拟】

    题意 xff1a 思路 xff1a 存储网格图不可能开数组a 50000 50000 xff0c 发现n m lt 61 400000 xff0c 可以用a 400001 来存储 xff0c i j gt a i 1 m 43 j 读入数据
  • 【Week14作业 C】Q老师的考验【矩阵快速幂】

    题意 xff1a Q老师 对数列有一种非同一般的热爱 xff0c 尤其是优美的斐波那契数列 这一天 xff0c Q老师 为了增强大家对于斐波那契数列的理解 xff0c 决定在斐波那契的基础上创建一个新的数列 f x 来考一考大家 数列 f
  • 【Week14作业 D】Q老师染砖【矩阵快速幂优化dp】

    题意 xff1a 衣食无忧的 Q老师 有一天突发奇想 xff0c 想要去感受一下劳动人民的艰苦生活 具体工作是这样的 xff0c 有 N 块砖排成一排染色 xff0c 每一块砖需要涂上红 蓝 绿 黄这 4 种颜色中的其中 1 种 且当这 N
  • 【Week15实验 D】瑞瑞爱上字符串【模拟】

    题意 xff1a 瑞瑞最近迷上了字符串 xff0c 因此决定出一个字符串的题 给定两个正整数 N K xff0c 考虑所有由 N 2 个 a 和 2 个 b 组成的字符串 xff0c 要求输出其中字典序第 K 小的 例如当 N 61 5 时
  • 【Week15作业 C】ZJM与纸条【KMP】

    题意 xff1a ZJM 的女朋友是一个书法家 xff0c 喜欢写一些好看的英文书法 有一天 ZJM 拿到了她写的纸条 xff0c 纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物 ZJM 想知道自己收到的礼物是不是就是她送的
  • 【Week16实验 A】TT数鸭子【模拟】

    题意 xff1a 思路 xff1a 如果k gt 10 xff0c 则每个数都可以满足条件 xff0c 答案即为n xff1b 否则依次读入每一个数 xff0c 计算不同数位的个数sum xff0c 如果sum lt k xff0c 则这个
  • 【Week16实验 B】ZJM要抵御宇宙射线【模拟】

    题意 xff1a 思路 xff1a 对每个点都求出到其余点的距离平方 xff0c 然后取该点到其他点的距离平方的最大值为半径平方 xff0c 最后对所有点的半径平方取最小值 注意有多解时将x较小 y较小的点作为答案 总结 xff1a 一道简
  • 【Week16实验 C】宇宙狗的危机【区间dp】

    题意 xff1a 思路 xff1a 这道题是区间dp xff0c 不是BST xff01 xff01 xff01 令l i j 表示以j为根 j的左子树可到i这样的BST是否存在 xff0c r i j 表示以i为根 i的右子树可到j这样的
  • Ubuntu实现远程登陆之telnet——安装telnet服务端

    telnet是一种网络通信协议 xff0c 我们可以使用它登录远程服务器 xff0c 虽然telnet有安全问题这一硬伤 xff0c 但正因如此 xff0c 它十分简洁 xff0c 非常容易地在资源受限设备上 xff08 如嵌入式环境 xf
  • week6 限时大模拟 A - 掌握魔法の东东 II

    题意 思路 创建一个pair lt int int gt 类型的数组a xff0c 用来保存一副牌的花色以及大小 运用stl的vector xff0c 来存储手牌shoupai xff0c 随后使用dfs搜索 xff0c 数组a里的牌在手牌
  • Hadoop可视化神器-Hue安装、编译、运行

    下载安装 CDH版本 xff1a http archive cloudera com cdh5 官网 xff1a http gethue com tar zxf hue 3 9 0 cdh5 15 0 tar gz C opt module
  • 电脑通过wifi连接树莓派3

    前提要求 树莓派首先要能用网线和电脑连接起来 树莓派和电脑连接的是同一个wifi 电脑的网络设置和电脑网线直连树莓派的设置是一样的 xff0c 可以参照我的上篇博文设置 树莓派必须是树莓派3型 xff0c 因为只有这个型号才内置了wifi模
  • Ubuntu更换源说明

    Ubuntu更换源说明 更换源步骤如下 xff1a 备份源列表 sudo cp etc apt sources list etc apt sources list bak 命令行打开sources list文件 sudo gedit etc
  • MyBatis-Plus 分页查询以及自定义sql分页

    一 引言 分页查询每个人程序猿几乎都使用过 xff0c 但是有部分同学不懂什么是物理分页和逻辑分页 物理分页 xff1a 相当于执行了limit分页语句 xff0c 返回部分数据 物理分页只返回部分数据占用内存小 xff0c 能够获取数据库

随机推荐

  • golang为什么用协程而不是线程

    当协程阻塞的时候 xff0c 运行时会自动将同一操作系统线程上的其他协程移动到另一个可运行的线程上 xff0c 这样这些协程就不会阻塞 xff0c 并且这个操作对开发人员来说是透明的 调用协程的开销很小 xff0c 大概只在内存的栈区用几K
  • golang从channel读数据的各种情况

    文章目录 用var定义channel且不make用var定义channel且make直给写操作加for直给读操作加for读写都加for读channel的第二个返回值关闭channel继续读写完然后关闭channel再开始读加个selectc
  • 一个小技巧:修改swagger源码让postman更好用

    本文假设你知道swagger xff0c 并且会用go generate swagger generate spec o swagger json生成json 首先生成的swagger json是可以直接导入到postman的 xff0c
  • rancher导入集群时证书报错

    rancher导入集群时证书报错 现象 导入集群时 xff0c cattle cluster agent报错如下 xff1a time 61 34 2022 06 28T08 00 28Z 34 level 61 error msg 61
  • goland远程调试k8s上容器

    goland远程调试k8s上容器 上次也遇到过一次需要在k8s的容器里debug程序的情况 xff0c 当时找了个偷懒的办法绕过去了 xff0c 这回绕不过去了 xff0c 老老实实整一把 主要还是用dlv配合goland的远程调试功能 选
  • 星际争霸2免修改器修改绝对一劳永逸

    那年那个冬天 xff0c 那是的我还是个那么纯洁的同学 长话短说 xff0c 就那个寒假百无聊赖的玩了玩星际争霸2单机模式 xff0c 然后各种被虐 劳资表示不服 xff0c 于是开启上帝模式打开游戏安装目录 随后将各种模式下的cpu玩家海
  • kali 简单版攻击WiFi(附详细教程)

    首先检查是否有无限网卡 在root终端输入ifconfig xff0c 检查是否有wlan0 然后分为以下几个步骤 xff08 review专用 xff0c 没有基础就看下面详细教程 xff09 1 输入airmon ng start wl
  • 【Android自助餐】Handler消息机制完全解析(一)Message中obtain()与recycle()的来龙去脉

    Android自助餐 Handler消息机制完全解析 xff08 一 xff09 Message中obtain 与recycle 的来龙去脉 Android自助餐Handler消息机制完全解析一Message中obtain与recycle的
  • 锐捷网络交换机配置命令大全

    欢迎关注微信公众号 xff1a 厦门微思网络 关注我 xff0c 你的眼睛会怀孕 基本配置 gt Enable 进入特权模式 Exit 返回上一级操作模式 End 返回到特权模式 write memory 或copy running con
  • 【Docker】搭建nextcloud私有网盘并映射外网

    背景 家里的老式电脑闲置着 xff0c 试着用docker 43 nextcloud搭建一个自己的网盘 xff0c 但是搭建完了用frp外网映射完了 xff0c 域名访问被限制 提示信息如下 xff1a 通过不被信任的域名访问请联系您的管理
  • 【Windows】解决.bat文件无法打开的问题

    以管理员身份打开cmd xff0c 输入assoc bat 61 batfile xff0c 回车
  • 【SpringBoot】banner在线生成网站

    1 文字转文本 https www bootschool net ascii 2 文字转文本 http www network science de ascii 3 图片转文本 https www degraeve com img2txt
  • 【deepin】安装x11vnc和xrdp,使用windows远程deepin

    一 环境准备 1 已安装deepin xff08 虚拟机或物理机 xff0c 安装教程自行查询 xff0c 很简单 xff09 xff0c 此处用的社区版deepin20 1做测试 xff08 目前已更新到20 2 xff09 2 启用ro
  • 【Python】使用nexus搭建使用pip仓库

    搭建环境 1 安装nexus3 参考 xff1a Maven 使用nexus搭建maven私有仓库 2 创建Blob Stores Name xff1a pypi Path xff1a 选择存储路径 3 创建Repositories代理 点
  • 【前端】使用nexus搭建本地npm仓库

    搭建环境 1 创建Blob Stores Name xff1a npm 2 创建Repository 创建npm hosted xff0c 填写Blob store xff1a npm 创建npm proxy xff0c 填写Blob st
  • 【Docker】docker指定mac地址启动

    1 使用命令 mac address 61 ae ac ae 71 1c 2c 2 启动示例 docker run d restart 61 always mac address 61 ae ac ae 71 1c 2c name redi
  • 【ICE学习】IceBox管理服务(C#)

    前提条件 xff1a 已安装VS2012和ICE3 5 1 xff0c ICE安装包 xff1a https download csdn net download xmzmqx 12928570 安装搭建环境比较简单 xff0c 请自行百度
  • 1.4编程基础之逻辑表达式与条件分支

    01 判断数正负 总时间限制 1000ms 内存限制 65536kB 描述 给定一个整数N xff0c 判断其正负 输入 一个整数N 109 lt 61 N lt 61 109 输出 如果N gt 0 输出positive 如果N 61 0
  • ubuntu kylin 14.04 中文切换到英文

    1 修改 etc default locale文件 LANG 61 34 en US UTF 8 34 LANGUAGE 61 34 en US en 34 2 修改 etc environment文件 LANG 61 34 en US U
  • 结构体嵌套与结构体指针

    struct和typedef struct 首先是结构体的定义格式 分三块来讲述 xff1a 1 首先 xff1a 注意在C和C 43 43 里不同 在C中定义一个结构体类型要用typedef typedef struct Student