在c语言中,
定义一个结构体
struct rect{
int llx;
int lly;
int color;
int width;
int height;
};
对结构体进行赋值的方法既可以用
struct rect r;
r.llx = r.lly=0;
r.color = 0xFF00FF;
r.width = 10;
r.height= 20;
也可以在声明变量的时候,进行初始化
struct rect 人= { 0, 0, 0xFF00FF, 10, 20};
一个常见的现象是,将指向结构体的指针从一个地方传递到另一个地方,而不是复制它们。例如,下边的函数计算长方形的面积,这里,传递给函数的就是一个指向长方形struct的指针:
int area(struct rect *rp)
{return (*rp).width*(*rp).height;
}
表达式(*rp).width间接引用了这个指针,并且选取所得结构width字段。这里必须要用括号,因为编译器会将表达式*rp.width解释为*(rp.width),而这时非法的。这种间接引用和字段选取的结合使用非常常见,以至于c语言提供了一种表示->作为替代。即rp->width等价于表达式(*rp.whidth)。例如,我们可以写一个函数,将一个长方形向顺时针旋转90度:
void rotate_left(struct rect *rp)
{
int t = rp->height;
rp->height= rp->width;
rp->width = t;
rp->llx -= t ;
}
就像数组可以嵌套在结构体中、数组可以嵌套在另一个数组中一样,结构体也可以嵌套在另一个结构体中。例如:
struct prob{
int* p;
struct{
int x;
int y;
}s;
struct prob *next;
};