结构体小结:
1.首先是对于结构体的定义,如果只有一个结构体的话,应用的话相对来说比较简单,但是,如果一个结构体的成员引用其他的结构体的话,记忆就容易出现混乱,例如:
struct date
{
int day;
int mouth;
int year;
};
struct studet
{
int num;
struct date.year;//这个是今天定义结构体时思维出现的混乱,和引用混在了一起,正确的是 struct date birthday;
};
这是在用的时候容易出现的问题,而且在定义时,一定要记得结构体定义结束时,加“;”,幸好这个会报错,不然找起来很难找。
2.对结构体成员进行初始值得时候,如果是初始化字符串,一定要记得加 “ ” ,好吧,这个也是细节问题。
3.结构体变量整体做函数的参数,在函数的调用过程中,是进行值传递;
4.对于共用体,结构体为他分配的空间是他一个成员所占内存的最大空间,结构体则是成员所占的内存中和。
5.对于枚举类型,枚举常量所表示的是整数类型;
enum weekday{sun,mon,tus,wen,thu,fri,sat};
0 1 2 3 4 5 6,
给初始值时,默认从0给,每次加1,但如果人为的改变了其值,后面的值就会随之发生改变;
enum weekday{sun,mon=5,tus,wen,thu,fri,sat};
0 5 6 7 8 9 10
枚举类型一般不能直接输入或者输出,输入一般枚举常量(整数)进行转换,输出则一般通过switch 语句以字符串的方式进行;
6.一般而言,每次对结构体进行引用时,都要写 struct +类型名,比较烦啊,这个时候,可以用重命名,使用typedef,相当的好用阿,而且在写稍微大型的程序时,是相当的方便的;
但应该注意的是:typedef 是仅给已有的类型名进行重新的命名,但并不产生新的的数据类型;
7.结构体指针用的比较多,但是我觉得结构体学会定义就好,主要是在链表用。。。。
8,值得一提的是,
typedef struct date
{
int day;
int mouth;
int year;
}DATE,*STU;
在这个STU的应用,有时候还是蛮吊的,例如在链表的排序时,
typedef struct infor
{
char num[20];
char name[30];
char add[50];
struct infor *next;
}INFO;
typedef struct infor1
{
char num[20];
char name[30];
char add[50];
}INFO1,*stu;
STUINFO *sort(INFO *phead)
{
INFO *p1,*p2;
INFO1 *m1,*m2;
INFO1 t;
for(p1=phead;p1!=NULL;p1=p1->next)
{
for(p2=p1->next;p2!=NULL;p2=p2->next)
if(strcmp(p1->num, p2->num) > 0)
{
m1=(stu)p1;
m2=(stu)p2;
t=*m1;
*m1=*m2;
*m2=t;
}
}
print (phead);
return (phead);
例 stu 2与struct date *stu2 性质是一样的,用处还是蛮流弊的。
结构体就总结到这里;