一、C语言结构体数组

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;
}

 

  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值