【好程序员训练营学习笔记分享4】结构体(二)

时间:2021-12-28 12:39:14

<A href="http://www.goodprogrammer.org/" target="blank">ios培训</A>------我的c语言笔记,期待与您交流! 

结构体(二)

上一篇笔记讲解了结构体的基本概念和结构体变量的定义和使用,这一篇将介绍结构体数组,结构体指针,位结构,结构体等内容。

1.结构体数组

我们上一篇知道如何定义一个学生变量,可是要是一个班级有40个学生的话我们就需要用数组来表示了

struct student

{

int num;

char name[20];

char sex;

}stu[40];

结构体数组初始化和结构体变量初始化不同,只能在{}后面定义变量的时候初始化。

不能struct student stu[40];

stu[0]={22,"小明",'w'};这样不行,应为在struct student stu[40];的时候已经完成了初始化,类似这样的语句,不是初始化,而是重新赋值!

但是结构体成员的赋值不能这样赋值。只能用'.'操作符来单个赋值。


2.结构体指针

我在指针里面讲过指向普通变量的指针,现在来说一指向结构体的指针,其实它和指向普通变量的指针意义一样,也是用来存储结构体变量的地址。

struct student *p = stu[0];

则要输出stu[0]的成员得用'->',实际上, p->num就是(*p).num的缩写形式

printf("num %d\n name %s\n sex %c\n",p->num,p->name,p->sex);

 需要指出的是结构指针是指向结构的一个指针, 即结构中第一个成员的首地 

注意: 
    1. 结构作为一种数据类型,  因此定义的结构体变量或结构指针变量同样有局 
部变量和全程变量, 视定义的位置而定。 
    2. 结构变量名不是指向该结构的地址, 这与数组名的含义不同,  因此若需 
要求结构中第一个成员的首地址应该是&[结构变量名]。

3.位结构就是我们需要按位来访问一个位或者多个位的时候就需要用到这种结构

格式:

struct 结构体名

{

类型 变量名 整形常数;

类型 变量名 整形常数;

};

【好程序员训练营学习笔记分享4】结构体(二)【好程序员训练营学习笔记分享4】结构体(二)

 1. 位结构中的成员可以定义为unsigned, 也可定义为signed,  但当成员长 
度为1时, 会被认为是unsigned类型。因为单个位不可能具有符号。 
    2. 位结构中的成员不能使用数组和指针, 但位结构变量可以是数组和指针, 
如果是指针, 其成员访问方式同结构指针。 
    3. 位结构总长度(位数), 是各个位成员定义的位数之和,  可以超过两个字 
节。 
    4. 位结构成员可以与其它结构成员一起使用。 

    5.使用位结构可以节省存贮空间