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++;  //李四的年龄+1printf("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);     //因为上一行代码先加后用,所以在上一行代码的地址上+1return 0;
}

一、C语言结构体数组相关推荐

  1. C语言 | 结构体数组

    C语言结构体数组概述 一个结构体变量中可以存放一组有关联的数据,如一个学生的学号.姓名.成绩等数据,如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组. 结构体数组与之前介绍的数值型 ...

  2. c语言字符结构数组初始化,C语言结构体数组初始化问题

    C语言结构体数组指定初始化器时,下面的三种方法,只有第三种可以,但是第一,二种,我看不出语法上哪错了,编译器DEVc++会报错 [Error] C99 designator 'num_insur' o ...

  3. c语言 结构体数组的赋值

    c语言 结构体数组的赋值 //**创建结构体** #include<stdio.h> struct Class{int id;char name[10]; }; //******结构体数组 ...

  4. c语言如何为结构数组赋值,C语言结构体数组同时赋值的另类用法

    说到C语言结构体数组的同时赋值,许多人一想就会想到用以下的这种方法,咱们来写一个例子: #include struct student { int a; int b ; int c ; }; stru ...

  5. C语言结构体数组,结构体数组的定义,结构体数组的输出,结构体的应用

    结构体数组 结构体数组的定义: 结构体数组格式:声明变量类型 数组名称[数组长度] //定义一个结构体数组名为a,它里面包含有5个元素,每一个元素都是一个结构体变量 Wor a[5]={}; #inc ...

  6. c语言结构体数组内存大小,如何为C语言的结构体数组分配/释放内存?

    如何为C语言的结构体数组分配/释放内存? struct emp { char name[10]; float salary; }; int main(int argc,char* argv[]) { ...

  7. C语言结构体数组的使用

    1.结构体数组的优点 结构体可以存储不同的数据类型,将他们互相联系起来.结构体数组可以连续存储多个结构体,和数组作用相似.比如想定义同一个最小外接矩形的四个坐标值,并给予这个矩形一个特征编号.当需要存 ...

  8. c语言——结构体数组——学生成绩表

    例题详解: 1. 在主函数中定义结构体数组,struct student stutable[10]; struct student {int stunum;//学号char name[20];//姓名 ...

  9. C 语言结构体数组指针以及函数

    结构体数组指针 指针变量可以指向一个结构体数组,这时指针变量的值是整个数组的首地址. 设 ps 为指向结构体数组的指针变量,则 ps 也指向该结构体数组的第 0个元素,ps+1 指向第一个元素,ps+ ...

  10. C语言结构体数组成员的赋值

    结构体的数组不能直接等号赋值,如果直接赋值会出现如下错误 错误代码示范: 编译结果: 错误原因: 结构体数组成员在引用的时候取的是数组名(是一个常量),所以不能直接将地址值赋给常量. 正确代码: 字符 ...

最新文章

  1. Docker网络详解——原理篇
  2. 为什么线程被唤醒后锁会被抢?
  3. 机房网络光纤扩容施工
  4. tabBar的图标不被系统渲染
  5. 设计模式C++实现(8)——代理模式
  6. 如何遍历某数据库中的每一个表的总记录数
  7. 10-1 channel
  8. linux初学者-软件安装与管理篇
  9. cmake 安装不同版本
  10. cad填充密度怎么调整_CAD填充技巧之填充比例
  11. ERP生产线管理系统 with WAMP
  12. python把英语句子成分字母_英语句子成分
  13. linux小白家教学一
  14. 微信公众号文章阅读数和点赞数采集接口
  15. matlab光子晶体求反射率,一维光子晶体禁带结构的MATLAB分析计算讲解.PDF
  16. android设置UI界面背景,Android ROM定制——界面美化基础(framework-res、SystemUI修改)...
  17. 闲扯Maven项目代码组织形式
  18. Visual Studio大写小写转换切换快捷键
  19. 换了爸爸,推特用户坐不住了……
  20. 【OpenPCDet】稀疏卷积SPConv-v1.2代码解读(5)

热门文章

  1. 苹果发布全新 iOS 及 OS X 系统,同时推出全新编程语言 Swift
  2. ArticulationBody的锚点位置和锚点旋转
  3. python xlwt写入数据超过范围限制_用xlrd包读取Excel文件-尽量不用xlwt包写入Excel文件最多能支持65536行数据。...
  4. 【金猿人物展】实在智能创始人、CEO孙林君:我们为什么坚定在IPA方向努力?...
  5. 如何进行系统硬盘分区
  6. QGIS使用 版本3.22
  7. Windows Key
  8. 在mysql语句中为什么要加反引号
  9. 中e管家个人投资理财技巧有以下几种
  10. scip指令集_「欧盟」SCIP数据库提交专题问答 QA