一、C语言结构体数组

2023-05-16

1、如何定义结构体数组
a) 单独写成一行来定义
struct student stu[3];       //可以用的下标是 stu[0]--- stu[2]

//定义结构体数组的时候还可以同时进行初始化
struct student stu[ ]={ { },{ },{ } };
struct student stu[3] = {
{1001,"张三",1,18,"1栋1单元",12,30,2000},
{1002,"李四",1,20,"2栋2单元",11,15,1998},
{1003,"王五",1,22,"3栋3单元",10,15,1996}
};
b) 定义结构体的时候顺便就定义结构体数组
struct student  
      {
    int num;          
    char name[100];  
    int sex;          
    int age;          
    char address[100];   
     struct date birthday;  
}stu[3];
//演示指向结构体变量的指针
#include<stdio.h>

struct date
{
    int month;
    int day;
    int year;
};

struct student  //定义一个结构体类型
{
    int num;          //学号
    char name[100];   //姓名
    int sex;          //性别:0 女   , 1  男
    int age;          //年龄
    char address[100];   //地址
    struct date birthday;  //生日   结构体类型的变量
}s1,s2;
int main()
{
    struct student stu[3] = {
    {1001,"张三",1,18,"1栋1单元",12,30,2000},   //stu[0]
    {1002,"李四",1,20,"2栋2单元",11,15,1998},   //stu[1]
    {1003,"王五",1,22,"3栋3单元",10,15,1996}    //stu[2]
    };
    stu[1].age++;  //李四的年龄+1
    printf("name=%s\n",stu[1].name);
    printf("age=%d\n",stu[1].age);


    return 0;
}

 

二、结构体指针

              结构体指针就是结构体变量的指针,这个指针肯定是指向该结构体变量所占据的内存段的起始地址。

             当然,结构体变量指针 也可以指向结构体数组中的元素,因为结构体数组中的每个元素它就相当于一个结构体变量;

    //现在,ps就指向了stu,stu里面内容若发生改变了,就等于ps所指向的内容发生改变。

    //如何通过结构体变量的指针来访问结构体变量的成员呢?有两种方法:

    (*ps).age=29;   //*ps 等价于 stu,这里加了括号是因为优先级问题,*不如 . 的优先级高

    ps->sex=1;      //其中这个 -> 叫 指向结构体成员运算符,优先级是最高的
#include<stdio.h>
#include<string.h>   //字符串拷贝命令
struct date
{
    int month;
    int day;
    int year;
};




struct student  //定义一个结构体类型
{
    int num;          //学号
    char name[100];   //姓名
    int sex;          //性别:0 女   , 1  男
    int age;          //年龄
    char address[100];   //地址
    struct date birthday;  //生日   结构体类型的变量
}s1,s2;
int main()
{
    struct student stu;   //定义一个结构体变量
    struct student *ps;   //定义一个结构体变量的指针
    ps=&stu;
    strcpy(stu.name,"小虎");
    stu.age=16;


    //现在,ps就指向了stu,stu里面内容若发生改变了,就等于ps所指向的内容发生改变。
    //如何通过结构体变量的指针来访问结构体变量的成员呢?有两种方法:
    (*ps).age=29;   //*ps 等价于 stu,这里加了括号是因为优先级问题,*不如 . 的优先级高
    ps->sex=1;      //其中这个 -> 叫 指向结构体成员运算符,优先级是最高的
    ps->num=1001;
    printf("name=%s\n",ps->name);
    printf("age=%d\n",ps->age);
    printf("num=%d\n",(*ps).num);
    printf("sex=%d\n",stu.sex);




    return 0;
}

//演示指向结构体数组的指针
#include<stdio.h>
struct date
{
    int month;
    int day;
    int year;
};

struct student  //定义一个结构体类型
{
    int num;          //学号
    char name[100];   //姓名
    int sex;          //性别:0 女   , 1  男
    int age;          //年龄
    char address[100];   //地址
    struct date birthday;  //生日   结构体类型的变量
}s1,s2;
int main()
{
    struct student stu[3] = {
    {1001,"张三",1,18,"1栋1单元",12,30,2000},   //stu[0]
    {1002,"李四",1,20,"2栋2单元",11,15,1998},   //stu[1]
    {1003,"王五",1,22,"3栋3单元",10,15,1996}    //stu[2]
    };

    struct student *ps;
    ps=stu;  //数组名字代表数组首地址。数组中数据在内存中都是挨着的;
    for(int i=0;i<3;i++)
    {
        printf("num=%d\n",ps->num);
        printf("name=%s\n",ps->name);
        printf("age=%d\n",ps->age);


        ps++;   //数组第一地址表示张三,++后就是李四的地址,再++后就是王五的地址;从张三跳跃到李四
                //意味着ps指向了下一个数组元素的开始地址
        printf("----------------------------------\n");

    }

    return 0;
}

 

说明:
(++ps)->num;       //++在前面表示先加后用,所以表示的是李四

 

#include<stdio.h>
#include<string.h>   //字符串拷贝命令
struct date
{
    int month;
    int day;
    int year;
};




struct student  //定义一个结构体类型
{
    int num;          //学号
    char name[100];   //姓名
    int sex;          //性别:0 女   , 1  男
    int age;          //年龄
    char address[100];   //地址
    struct date birthday;  //生日   结构体类型的变量
}s1,s2;
int main()
{
    
    struct student stu[3] = {
    {1001,"张三",1,18,"1栋1单元",12,30,2000},   //stu[0]
    {1002,"李四",1,20,"2栋2单元",11,15,1998},   //stu[1]
    {1003,"王五",1,22,"3栋3单元",10,15,1996}    //stu[2]
    };


    //演示指向结构体数组的指针
    struct student *ps;
    ps=stu;  //数组名字代表数组首地址。数组中数据在内存中都是挨着的;
    
    printf("%s\n",(++ps)->name);     //++在前面表示是:先加后用




    return 0;
}

 

#include<stdio.h>
#include<string.h>   //字符串拷贝命令
struct date
{
    int month;
    int day;
    int year;
};




struct student  //定义一个结构体类型
{
    int num;          //学号
    char name[100];   //姓名
    int sex;          //性别:0 女   , 1  男
    int age;          //年龄
    char address[100];   //地址
    struct date birthday;  //生日   结构体类型的变量
}s1,s2;
int main()
{


    struct student stu[3] = {
    {1001,"张三",1,18,"1栋1单元",12,30,2000},   //stu[0]
    {1002,"李四",1,20,"2栋2单元",11,15,1998},   //stu[1]
    {1003,"王五",1,22,"3栋3单元",10,15,1996}    //stu[2]
    };


    //演示指向结构体数组的指针
    struct student *ps;
    ps=stu;  //数组名字代表数组首地址。数组中数据在内存中都是挨着的;




    printf("%s\n",(ps++)->name);     //++在后面表示是:先用后加
    printf("%s\n",ps->name);     //因为上一行代码先加后用,所以在上一行代码的地址上+1






    return 0;
}

 

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

一、C语言结构体数组 的相关文章

随机推荐

  • 关于Maven项目junit依赖出现版本号标红的解决方案

    关于Maven项目junit依赖出现版本号标红的解决方案 使用IDEA创建Maven项目时 xff0c pom里面的junit依赖的版本号出现标红 即版本号错误 xff09 xff0c 之前版本为4 10 解决方案 xff1a 找到本地仓库
  • 【C语言】单链表及插入(头插法、尾插法)

    目录 一 什么是单链表 二 单链表的插入 1 头插法 xff08 1 xff09 空链表情况 xff08 2 xff09 非空链表情况 2 尾插法 一 什么是单链表 链表是一种数据存储结构 xff0c 其存储地址并不连续 xff0c 数据元
  • Debian基础配置

    Debian的安装及基础配置 正文 debian基本介绍debian基本安装debian基本配置 结尾 本文介绍Debian的安装与基础配置 debian基本介绍 debian是一款稳定的基于Linux的操作系统 xff0c 它是由自由和开
  • OpenGL:配置glad

    GLAD库的作用 GLAD是一个开源的库 xff0c 它能解决我们上面提到的那个繁琐的问题 GLAD的配置与大多数的开源库有些许的不同 xff0c GLAD使用了一个在线服务 在这里我们能够告诉GLAD需要定义的OpenGL版本 xff0c
  • MySQL中ENGINE = InnoDB AUTO_INCREMENT = 200 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci的作用

    span class token keyword CREATE span span class token keyword TABLE span span class token punctuation 96 span permission
  • Docker数据管理,镜像创建与分层结构

    Docker数据管理 xff0c 镜像创建与分层结构 一 Docker的数据管理1 数据卷2 数据卷容器 二 容器互联 使用centos镜像 三 Docker 镜像的创建1 基于现有镜像创建2 基于本地模板创建3 基于Dockerfile
  • R语言——数据分析

    R语言 什么是数据分析 数据 数据 xff1a 是指对客观事件进行记录并可以鉴别的符号 xff0c 是对客观事物的性质 状态以及相互关系等进行记载的物理符号或这些物理符合的组合 为什么要做数据分析 我们可以通过数据分析的结果来指导决策 数据
  • CentOS 7 云服务器安装mysql5.7

    将mysql5 7的安装包上传到主机上 解压安装到 opt app 中 tar zxvf mysql 5 7 34 linux glibc2 12 x86 64 tar gz C opt app 修改目录名 mv opt app mysql
  • java求1000以内的完数及分析

    需求 一个数如果恰好等于它的因子之和 这个数就称为 完数 例如 6 61 1 43 2 43 3 编程找出 1000 以内的所有完数 分析 一千个数肯定跑不了循环的使用 xff0c 常用的循环有两个 xff0c 一个是for xff0c 一
  • 数据结构算法设计题汇总

    五 算法设计题 xff08 本题10分 xff09 34 二叉排序树的类型定义如下 xff1a typedef struct BSTNode 二叉排序树的结点结构 int data 数据域 struct BSTNode lchild rch
  • 初学node.js 对app.js的解释

    使用各种模块包 http errors模块包主要功能监视http请求过程的错误 中间件middleware xff0c 中间件本质上就是一个模块包 监听错误的中间件 var createError 61 span class token f
  • 什么是原码、反码和补码

    什么是原码 反码和补码 文章目录 什么是原码 反码和补码1 机器数2 原码3 反码4 补码5 总结 1 机器数 前言 一个数在计算机中的表示形式是二进制的话 xff0c 这个数其实就叫机器数 机器数通常是带有符号的 xff08 指有正数和负
  • ros找不到包的两种原因

    目前遇到的找不到包的两种情况是 没有设置环境变量而找不到包 解决方法1 xff0c 当前终端输入source 加包所在工作空间的devel set bash的绝对路径或相对命令行的路径 解决方法2 xff0c 打开用户目录 xff5e 的
  • Python 设计一个窗口程序,进行多种数学计算

    设计一个窗口程序 xff1a 想要实现四种功能 xff1a 1 设置按钮 x1f518 1 xff1a 点击 弹出三行输入框 输入函数表达式 显示其Latex数学表达式 输入三个函数 分别为 f 1 x f 2 x f 3 x 点击 run
  • OpenGL:如何从缓存中读取颜色、深度信息【转】

    GPU渲染完数据在显存 xff0c 回传内存的唯一方式glReadPixels函数 显存也被叫做显示内存 帧缓存 xff0c 它是用来存储显示芯片处理过或者即将读取的渲染数据 如同计算机的内存一样 xff0c 显存是用来存储图形数据的硬件
  • 字符串的练习

    字符串的练习 1 接受用户输入的字符串 将其中的字符以输入相反的顺序输出 例如 34 abc 39 34 cab 39 39 解法1 用for循环的倒叙 但这样并有改变字符串的值 string str 61 34 werthueyihzii
  • eNSP配置ospf——三台路由器

    文章目录 拓扑配置IP地址配置ospfAR1AR2AR3 总结两路由器之间配置ospf xff0c 需要将接口配置为同一网段再宣告 两路由器之间配置ospf xff0c 需要两边都进行宣告 拓扑 配置IP地址 如拓扑图所示 xff0c 不再
  • 【openstack】cloudkitty组件,入门级安装(快速)

    文章目录 前言架构安装配置启动检索并安装 CloudKitty 的仪表板 前言 什么是CloudKitty xff1f CloudKitty是OpenStack等的评级即服务项目 该项目旨在成为云的退款和评级的通用解决方案 从历史上看 xf
  • 性能测试工具iPerf和Netperf使用介绍

    实验教程 任务目的 1 掌握iPerf的功能和基本命令 xff0c 利用iPerf测试主机之间的吞吐量 xff0c 熟悉基本命令参数的作用 xff0c 为后期实验做准备 2 掌握Netperf的功能和基本命令 xff0c 能够根据不同的测试
  • 一、C语言结构体数组

    1 如何定义结构体数组 a 单独写成一行来定义 struct student stu 3 可以用的下标是 stu 0 stu 2 定义结构体数组的时候还可以同时进行初始化 struct student stu 61 struct stude