一、 结构体是一种数据类型,和int, double一样,都可以用来定义变量
二、 结构体是一种自定义数据类型,所以想使用就必须先定义
三、 结构体可以存放多种类型的变量,这些变量组合在一起,形成一个有意义的元素
四、 结构体的定义:
struct 结构体{
访问修饰符 数据类型 成员名1;
访问修饰符 数据类型 成员名2;
……
}
// 定义一个学生结构体,包含成员:姓名,年龄,性别,学号
struct Student{
public string name;
public char gender;
public int age;
public int number;
}
手动添加自定义构造方法的结构:
public 结构体名 (参考列表){ 赋值语句;}
public Student (string a, char b, int c, int d){
// 为各个成员赋值
name = a;
gender = b;
age = c;
number = d;
}
五、注意
1.定义结构体时,只能声明变量,不能赋值
2.成员之间以分号分隔
六、结构体变量
1.由结构体类型修饰的变量
2.定义格式: 结构体类型 变量名
3.访问结构体成员: 变量名 成员名
// 定义一个结构体 变量
Student stu;
// 静态初始化,必须先给成员赋值,才能使用
stu.name = “老王”;
stu.gender = ‘m’;
stu.age = 18;
su.number = 10086;
Console.WriteLine ( stu.name + “ “ + stu.number );
// 动态初始化,使用new关键字,调用构造方法开辟空间,会为成员赋默认值
Student stu = new Student ( );
stu1.age = 10;
Console.WriteLine ( stu1.age + “ “ + stu1.name + “ ” + stu1.gender + “ “ + stu1.number);
七、结构体变量赋值
1.单一赋值
stu1.name = "老宋"
2.整体赋值 注意:原结构体变量的成员必须全部赋值
Student stu2 = stu;
Console.WriteLine(stu2.name);
// 练习 定义一个老师结构体,包含成员:姓名、年龄、身高,定义一个变量,赋值并输出全部信息
Struct Teacher
{
// 手动构造
public string name;
public int age;
public double height;
// 自定义构造
public Teacher (string a, int b, double c){
name = a;
age = b;
height = c;
}
}
Teacher[ ] tea ;
tea.name = “王”;
tea.age = 18;
tea.height = 180.5;
Console.WriteLine (tea.name + “ “ + tea.age + “ ” + tea.height );
// 整形数组
int[ ] arr = new int[5]
Teacher[ ] teas = new Teacher[ 5]
string[ ] names = { “张三” ,“李四”,“王五”, “赵大”, “钱二”}
Random ageR = new Random ( );
Random heightR = new Random ( );
// 为数组元素赋值
for ( int j = 0;j < teas. Length ; j ++){
teas[ j ] .name = name [ j ] ;
teas[ j ] .age = ageR.Next(20,40)
teas[ j ].height = heightR. Next ( 160,190) ;
}
// 输出所有老师的信息
for( int i = 0;i < teas. Length ; i++){
Console. WriteLine ( “name:{0},age:{1},height{2”, teas[ i ].name, teas[ i ].age, teas[ i ].height );
}
// 找出年龄最大的老师,并输出它的所有信息
Teacher temp = new Teacher();
for ( int i = 0;i < teas.Length - 1; i++){
temp = temp.age > teas[ i ].age ? temp : teas[ i ] ;
}
Console. WriteLine (“年龄最大者的信息为:{0},{1},{2}”,temp.name ,temp. age , temp.height)
// 将所有老师按身高升序排列
for( int i = 0;i < teas.Length - 1; i++){
for( int j = 0; j < teas.Length - 1 - i; j++){
if(teas[ j ].height > teas[ j + 1 ].height){
Teacher temp1 = teas[ j ];
teas [ j ] = teas [ j + 1];
teas [ j + 1] = temp1;
}
}
}
Console.WriteLine ( “\n 按身高升序排列后”);
for ( int i = 0; i < teas.Length ; i++){
Console.WriteLine( “name:{0},age{1},height{2}”,teas[ i ].name , teas [ i ] .age, teas[ i ].height );
}
// 将所有老师按年龄升序排列
for ( int i = 0;i < teas.Length - 1; i++ ){
for ( int j = 0 ;j <teas. Length - 1 - i; j++ ){
if ( teas[ j ].age > teas [ j + 1] ){
Teacher temp2 = teas[ j ];
teas [ j ] = teas[ j + 1];
teas[ j ] = temp2;
}
}
}
Console.WriteLine( “\n按年龄升序排列后”);
for ( int = i ; i < teas.Length ; i++){
Console.WriteLine( “name:{0}, age{1}, height{2}” , teas[ i ]. name , teas[ i ] .age , teas[ i ].height )
}
八、自定义构造方法
目的:简化代码,方便赋值
注意:必须为全部的成员赋值
九、结构体嵌套
一个结构体的成员,可以是另一种结构体的类型
(一个结构体类型的变量,可以作为另外一个结构体的成员)