结构体的学习

来源:互联网 发布:端口被系统占用 编辑:程序博客网 时间:2024/05/17 13:43
使用结构可以把不同类型的值存储在一起。


数组元素可以通过下标访问,这只是因为数组的元素长度相同。由于结构的成员可能长度不同,所以不能使用下标来访问他们,相反,每个结构体都有自己的名字,他们是通过名字访问的。


struct{
 int a;
 char b;
 float c;
       }x;
这个声明创建了一个名叫x 的变量,包含三个成员:一个整数、一个字符和一个浮点数。
struct{
 int a;
 char b;
 float c;
       }y[20],*z;
这个声明创建了y和z。y是一个数组,它包含了20个结构体。z是一个指针,它指向这个类型的结构。


标签允许多个声明使用同一个成员列表,并且创建同一类型的结构。
struct SIMPLE{
int a;
char b;
float c;
}
这个声明把标签SIMPLE和这个成员列表联系在一起。该声明并没有提供变量列表,所以它并未创建任何变量。


struct SIMPLE x;
struct SIMPLE y[20],*z;
这些声明使用标签来创建变量。它们创建和最初两个例子一样的变量,但存在一个重要的区别 -----现在x、y、z都是同一种类型的结构变量。




typedef struct{
int a;
char b;
float c;
}simple;


simple x;
simple y[20],*z;


提示:如果想在多个源文件中使用同一种类型的结构,应该把标签声明或typedef形式的声明放在一个头文件中。当源文件需要这个声明时可以使用#include指令把那个头文件包含进来。


struct COMPLEX{
float  f;
int    a[20];
long   *lp;
struct SIMPLE  s;
struct SIMPLE  sa[10];
struct SIMPLE  *sp;
};
一个结构体的成员的名字可以和其他结构的成员的名字相同,所以这个结构的成员a并不会与struct SIMPLE s的成员a冲突。




结构体成员的直接访问
结构变量的成员是通过点操作(.)访问的。
struct COMPLEX comp;
((comp.sa)[4]).c
comp.sa[4].c


结构成员的间接访问
点操作符的优先级高于间接访问操作符,所以必须在表达式中使用括号,确保间接访问的首先执行。
void func( struct COMPLEX *cp);
(*cp).f
这个概念有点惹人厌,所以C语言提供了一个更为方便的操作符来完成这项工作->操作符(也成箭头操作符)。左操作数必须是一个指向结构的指针。
cp->f
cp->a
cp->s
1 0