———–Java培训、Android培训、IOS培训、.Net培训、期待与您交流!————
本节是个人学习过程中的笔记,供初学者一起学习,欢迎大家批评指正,留言参与讨论,谢谢。
本节涉及到结构体变量五种定义方式与指针结构体数组探究,涉及很多细节,详细变化请参考代码,谢谢。
#include <stdio.h>
struct Date
{
int year;
int month;
int day;
};
struct Student
{
int no;
int age;
float height;
char* name;
struct Date birthday;
struct Date enterSchoolDay;
};
void testDate()
{
struct Date today={2015,3,26};
printf("%d\n",today.year);
}
int main()
{
testDate();
//定义一个结构体变量三种方式,第一种,定义结构体类型与变量分离
struct Student me = {1,20,1.78,"Lion",{1989,8,14},{2007,9,1}};
//第二种,定义结构体类型同时进行
struct Test
{
int test;
}t1;
//第三种,定义结构体类型与变量分离,但是匿名定义类型,这样这个结构体只能使用一次
struct{
int test;
}t2;
//第四种,定义结构体类型与变量同时定义,但是匿名定义类型,这样这个结构体只能使用一次
struct{
int test;
}t3={12};
//第五种,定义结构体类型与变量同时定义。
struct Test2{
int test;
}t4={12};
t1.test=10;
t2.test=11;
t4.test=13;
printf("%s\n",me.name);
printf("%d\n",t1.test);
printf("%d\n",t2.test);
printf("%d\n",t3.test);
printf("%d\n",t4.test);
// struct Student* p;
// p = &me;
struct Student* p = &me;
//*p = me; 这种赋值方式错误
printf("%s\n",(*p).name);
printf("%s\n",p->name);
//定义一个全局嵌套结构体
struct Student students[] ={ //students[] 里面的[]必不可少
{1,20,1.78,"Tiger",{1989,8,14},{2007,9,1}},
{2,18,1.68,"Pander",{1990,7,14},{2007,9,1}}
};
printf("%s,%d\n",students[1].name,students[1].birthday.year);
// struct Student* sp[] ={ //
// {1,20,1.78,"Tiger",{1989,8,14},{2007,9,1}},
// {2,18,1.68,"Pander",{1990,7,14},{2007,9,1}}
// };
//printf("%s,%d\n",(*(sp[0])).name,(*(sp[0])).birthday.year);
//还是报错,不知道指针类型结构体数组,该如何遍历
struct Student* sp[] = {&students[0],&students[1]};
sp[0] = &(me);
sp[1] = &(students[1]);
// struct Student* sp1[] ={ //
// &(struct Student {1,20,1.78,"Monkey",{1989,8,14},{2007,9,1}}n1),
// &(struct Student {2,18,1.68,"Dog",{1990,7,14},{2007,9,1}}n2)
// };
//难以实现 因为&students[0]与&{1,20,1.78,"Tiger",{1989,8,14},{2007,9,1}}是有所差异的。
//
printf("%s,%d\n",(*(sp[0])).name,(*(sp[0])).birthday.year);
//printf("%s,%d\n",(*(sp1[0])).name,(*(sp1[0])).birthday.year);
}
运行结果如下: