一、枚举
enum nameOfenum {name1,name2,...};
name1==0; name2==1;....
枚举计数技巧:
enum color {red,green,blue,numOfcolor}; //最后一个表示枚举量中有几个有意义的值
枚举声明值
enum color {red=1,green,blue=5}; //green=2;
二、结构体
情况一:
struct date{
int month;
int day;
int year;
};
struct date today; // date为结构类型名 today为变量名
情况二
struct {
int month;
int day;
int year;
}today,yesterday; //today yeterday为变量名不是类型名,结构无名
情况三:
struct date {
int month;
int day;
int year;
}today,yesterday;
变量初始化:
- today={07,04,2014}; //2014-7-4
- today={.month=7, .day=04} ; //0-7-4
- today.month=7.....
- today=(struct date){5,7,2014};
- today=yesyerday; // today.month=yesterday.month......
结构指针
struct date *p= &today;
(*p).month; //today.month
p->month; //today.month ->表示指针所指的结构体的成员
传入结构类型的参数,并不能改变主函数的该结构变量,
若要改变,第一种方法可采用返回结构变量的形式如:
struct date f()
{
struct date d2;
....;
return d2;
}
struct date d1=d2;
第二种方法可传入指针
struct date* f(struct date *p)
{
操作;
return p;
}
void g(struct date p)
{
操作;
}
int main()
{
struct date day;
f(&day);
g(*f(&day)); //*f(&day)=(struct date){0,1};也是可以的
}
结构数组:
stuct date d[100]={{0,1,2015},{8,11,2014},};
结构中的结构:
struct dateAndTime{
struct date D1;
struct date D2;
}
以下几中情况结构指针和结构表达结果一样:
struct dateAndTime d,*t;
t=&d;
d.D1.month;
(d.D1).month;
t->D1.month;
(t->D1).month;
没有t->D1->month; 因为D1不是指针;
类型定义:
typedef int NEWINT;
NEWINT a=10;
结构体
typedef struct date
{
int month;
int dat;
} date; //即date为该结构体的新名字
date d={2,12};
注意区分没有typedef的时候,date为变量名
例:
typedef struct Node{
int data;
struct Node *next;
} ANode;
等价于
typedef struct Node Anode;
//--------
Anode node1;,node2;
node1.data=10;
node1.next=node2;
node1.next->data=20;