struct的⽤法
使⽤结构体类型处理组合数据:即⽤户⾃定义数据类型。
1 c语⾔提供了很多系统类型。如int char float double等等,但是这都是单⼀的数据类型,如果对于⼀个学⽣作为⼀个整体的话,那么他的类型就不可能是这么单⼀。并且肯定含义char int 等这些类型,这个时候就要根据我们⾃⾝的需要去建⽴数据类型,这就是struct。
2 数组不能完成这项任务,为什么呢?因为数组只能存储相同类型的数据,⽐如int [] char[]。
<;第⼀个重点>:
3 结构体类型:
struct student{
Int num;
Char sex;
Int age;
Char name[20];
};
注意:1 最后的分号不要省略。
重:2 他与int(等) 是等价的,只不过int(等) 是系统定义好的,⽽这个是⾃⼰定义的。
3 结构体的名字是⽤户⾃定义的,以便于其他struct相区别。
4 ⼤括号内部的⼦项被叫做成员。
重:5 成员(即⼦项)也可以是⼀个struct 类型。
重:结构体类型和int这种系统定义的类型是等价的,那么声明⼀个变量时就该是这样 ,
Int a;            ================                              struct student a;
<;第⼆个重点>:
4 定义结构体变量类型:
1 结构体变量相当于⼀个模型,并没有定义变量,也就是说:如果是int a的话,那么只定义了int 是啥,还没有定义a.
2 三种⽅法定义结构体类型变量:
<1>struct  student        stu1,    stu2;
这⾥定义了stu1 stu2 ,相当于int a⾥⾯的a;
<2>在定义结构体类型时同时定义变量
Struct student{
Int num;
Char name[20];
Int sex;
}student1,student2;
注意这⾥的结束的分号,逗号。写⼩程序⽐较合适,⼤程序还是分开⽐较好。
<3>不指定类型名⽽直接去定义。这种⽅式不好,因为显然这样就会导致整个程序只有⼀个struct。
3 只对结构体类型变量赋值,分配空间,⽽不会对结构体类型进⾏分配空间。
<;第三个重点>:结构体类型变量的初始化与引⽤。
重:初始化可以静态形式,也可以动态。静态类似于数组的形式,动态类似于给类的属性赋值⼀样。
结构体数组不能作为参数传递给函数这个太简单了,不需要怎么讲,注意三点:
1  struct student {
Int num;
}student1={1};
2  student1.num;
3  如果⽤scan赋值,那么int 需要&,  char[]不需要&,你懂得,数组名就是地址。
<;第四个重点>:结构体数组:即当⾯对多个学⽣的时候该怎么办?
结构体数组:与数值型数组基本上是⼀样的,区别就是数组型存放的是⼀个⼀个数值,⽽这⾥⾯存放的是结构体类型变量。初始化三种:
1 可以把所有事都办到⼀起。
2 可以把他分成两件事
3 定义时要{{  a,  b  ,  c    } , {  } , {  }};
重重重重重重:3 ⼀定要注意,数组的声明和初始化⼀定要放到⼀起。(⼀定要注意,这是要对所有数组来说)。
<;第四个重点>:结构体指针。即⼀个结构体变量的其实地址。
1 指针变量的基类型必须与结构体类型⼀样。
2 访问结构体变量的成员:
1  (*p).name 注意这个括号不能省,因为 “  .  ”运算符级别⾼于”  *  ”
2  p->name也可以访问。->为指向运算符。
3  结构体变量名.成员名。
3 strcut student * p;p++;其中这个p++,加的是不是⼀个字节,⽽是struct student ⾥⾯有多少字节,就⼀次加多少字节。
<;第五个重点>:⽤结构体变量和变量的地址做参数。
⼀般是两种情况:1 ⽤值(stu1.name)做传递。
2 ⽤指针做传递。
形参:
1 数组名  a;
2 数组  a[];
3 指针变量 *a;
重中之重:如果想在很多函数⾥⽤这个struct,那么⼀定要定义在函数外部。
重中之重:如果传递结构型变量数组参数给函数,由于是⼆维的,必然是⼀个⼆维数组,则实参的参数是地址(数组名:student或是⾸地址&student[0]),形参的参数必须是数组形式即(struct student a[]),⽽不能是(struct student * a);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。