一、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];
-
//演示指向结构体变量的指针
-
-
-
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; //其中这个 -> 叫 指向结构体成员运算符,优先级是最高的
-
-
-
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;
-
}
-
//演示指向结构体数组的指针
-
-
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; // 在前面表示先加后用,所以表示的是李四
-
-
-
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;
-
}
-
-
-
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;
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgggeeg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13