结构体的使用

来源:互联网 发布:直播特效声音软件 编辑:程序博客网 时间:2024/05/17 12:52
结构体是一种构造数据类型,是不同数据类型数据组成的集合体。我们可以根据需要自己定义结构体,
简化自己的代码,使之可读性和灵活性提高。
结构体类型的定义如下:
struct  结构体类型名
    结构体成员1;
   结构体成员2;
            .
            .
     结构体成员n;
};
结构体成员可以是任何数据类型数据,如:
struct Stud
{
    char name;
    int num;
};
上面定义了一个Stud类型的结构体。这里要区分结构提变量与结构体类型的关系。
刚开始接触结构体会不太清楚两者的区别。所谓类型我们可以看作是一种属性或内涵。
拿上面这个例子来说,如果我们以后定义了Stud这种类型的结构体变量,那么这个
变量的里面就一定有一个char 型的变量 name和一个整型的num。
上面只是构造了一个结构体类型,并未定义一个结构体变量。定义结构体变量的方法有两种:
第一种方法:在定义结构体类型之后再定义,如:   
struct Stud
{
    char name;
    int num;
};

struct  Stud  stud1 , stud2;
这样就定义了两个结构体变量stud1和stud2,之后就可以使用这两个变量了。

第二种方法:在定义结构体类型之后同时定义,如:
struct Stud
{
    char name;
    int num;
} stud1 , stud2;
效果与第一种方法一样。
要注意的是在定义结构体类型是,编译器是不会给它们分配内存的,只有在具体定义这个类型的结构体变
量时才会分配内存,因此在定义结构体类型时是不能对它进行初始化的如:
struct Stud
{
    char name = 0;
    int num = 0;
} ;
是非法的。
结构体类型在定义的时候类型名可以省略,但在定义类型的时候,必须同时定义结构体变量,否则在后面的程序中
想要定义这种类型的结构体就麻烦了,因为你不知道这种类型叫什么。
struct
{
  char name ;
    int num ;       
};

这种定义是无意义的。

可以这样定义
struct
{
   char name ;
    int num ;       
} stud1 , stud2;
这样也可以定义两个结构体变量。但这种方式不太灵活,因为你必须一次就要把所有要用到的变量全部定义完。

还有一种方式就是给它另外取了一个名字,这时就要用到“typedef”这个东东了。它专给人家取小名。先看个例子:
typedef struct
{
   
   char name ;
    int num ;  
}STUD;
这时,STUD不再是结构体变量了,而是我们就给这种结构体类型取的一个别名STUD,
定义变量这样定义就行了
STUD  stud1, stud2;


我们还可以定义结构指针。它的定义与结构体变量定义类似。为了简便后面就都用"小名"的方式定义结构体变量。
typedef struct 
    char name ;
     int num ;    
}DTUD

DTUD *p, stud1;
这样就定义了一个DTUD类型的指针和变量,与普通指针一样结构体指针在使用前必须指向一个地址。
如 p=&stud1;这样指针p就可以使用了,还有一点要注意的是不能把结构体成员的地址赋给结构体指针。
如: p = stud1.num ; 是不合法的。
利用 p 引用结构体变量 stud1 的成员的方式如下:
p->name ="abc";或(*p).name ="abc";  与  stud1.num ="abc";是一样的,
(*p).name ="abc";中()不能少, 因为 " . " 优先级高于“ * ”,去掉括号后相当于*(p.name)这明显不对。







2 0