• 31_结构体的使用


    1.结构体是将零个或多个任意类型的命名变量组合在一起的聚合数据类型,每个变量都叫做结构体成员
    2.结构体何以作为函数参数传递,其是复制一个结构体将它传给一个函数,是值传递

    代码如下:

    package
    main
    
    
    import"fmt"
    
    
    //定义一个结构体,存储学生信息
    //要想被不同的包调用结构体,则结构体的名字首字母要大些,里面的变量名也要大写
    typeStudentstruct{
    //和变量定义不同,不要写var关键字
    Id int
    Name string
    Sex byte
    Age int
    Addr string
    }
    
    
    //值传递
    funcPrintName(sStudent){
    s.Name="test"
    fmt.Println(s.Name)//test
    }
    
    
    //引用传递
    funcPrintId(s*Student){
    s.Id=666
    fmt.Println(s.Id)
    }
    funcmain(){
    
    
    //1.结构体中可以通过(.)操作符来对成员变量进行赋值
    vars1Student
    s1.Name="steven"
    fmt.Println(s1.Name)
    //2.顺序初始化,必须每个成员都要初始化
    s2:=Student{1,"alice",'m',23,"sy"}
    fmt.Println(s2)
    //3.部分初始化
    s3:=Student{Id:2,Name:"zhangsan"}//没有初始化的默认为0
    fmt.Println(s3)
    
    
    //4.指针变量的定义
    vars4*Student=&Student{3,"lisi",'w',22,"js"}
    s5:=&Student{Id:4,Name:"wangwu"}
    
    
    //s4.成员*s4.成员是等价的,(.)操作符比*操作符级别高,所以(*)要加括号
    fmt.Printf("*s4.Addr=%d",(*s4).Id)
    
    
    //两者效果是一样的
    fmt.Println(s4,s5)//&{3lisi11922js}&{4wangwu00}
    fmt.Println(*s4,*s5)//{3lisi11922js}{4wangwu00}
    
    
    //5.先分配空间在赋值,这种定义的是指针类型
    s6:=new(Student)
    s6.Id=6
    s6.Name="xiaoqi"
    fmt.Println(*s6)//{6xiaoqi00}
    
    
    //7.结构体变量只能进行==和!=比较
    fmt.Println(s1==s2)//false
    
    
    //8.结构体做函数参数,是值传递
    PrintName(s3)
    fmt.Println(s3.Name)//zhangsan
    
    
    //9.引用传递
    PrintId(&s2)
    fmt.Println(s2.Id)
    
    
    //相同结构体之间可以赋值
    vars7Student=s2
    fmt.Println("S7=",s7)
    }
    
    
    packagemain
    
    
    import"fmt"
    
    
    //定义一个结构体,存储学生信息
    //要想被不同的包调用结构体,则结构体的名字首字母要大些,里面的变量名也要大写
    typeStudentstruct{
    //和变量定义不同,不要写var关键字
    Idint
    Namestring
    Sexbyte
    Ageint
    Addrstring
    }
    
    
    //值传递
    funcPrintName(sStudent){
    s.Name="test"
    fmt.Println(s.Name)//test
    }
    
    
    //引用传递
    funcPrintId(s*Student){
    s.Id=666
    fmt.Println(s.Id)
    }
    funcmain(){
    
    
    //1.结构体中可以通过(.)操作符来对成员变量进行赋值
    vars1Student
    s1.Name="steven"
    fmt.Println(s1.Name)
    //2.顺序初始化,必须每个成员都要初始化
    s2:=Student{1,"alice",'m',23,"sy"}
    fmt.Println(s2)
    //3.部分初始化
    s3:=Student{Id:2,Name:"zhangsan"}//没有初始化的默认为0
    fmt.Println(s3)
    
    
    //4.指针变量的定义
    vars4*Student=&Student{3,"lisi",'w',22,"js"}
    s5:=&Student{Id:4,Name:"wangwu"}
    
    
    //s4.成员*s4.成员是等价的,(.)操作符比*操作符级别高,所以(*)要加括号
    fmt.Printf("*s4.Addr=%d",(*s4).Id)
    
    
    //两者效果是一样的
    fmt.Println(s4,s5)//&{3lisi11922js}&{4wangwu00}
    fmt.Println(*s4,*s5)//{3lisi11922js}{4wangwu00}
    
    
    //5.先分配空间在赋值,这种定义的是指针类型
    s6:=new(Student)
    s6.Id=6
    s6.Name="xiaoqi"
    fmt.Println(*s6)//{6xiaoqi00}
    
    
    //7.结构体变量只能进行==和!=比较
    fmt.Println(s1==s2)//false
    
    
    //8.结构体做函数参数,是值传递
    PrintName(s3)
    fmt.Println(s3.Name)//zhangsan
    
    
    //9.引用传递
    PrintId(&s2)
    fmt.Println(s2.Id)
    
    
    //相同结构体之间可以赋值
    vars7Student=s2
    fmt.Println("S7=",s7)
    }
    
    
    每天的价值就是不停息的前进!!!
  • 相关阅读:
    hdu 6435 Problem J. CSGO 最长曼哈顿距离+二进制枚举
    UVA11419 SAM I AM 二分图最小点覆盖
    数论入门基础整理
    [算法导论]#1 摊还分析
    [转载]markown语法
    [AC自动机]玄武密码
    [学习笔记]AC自动机
    分火腿
    [学习笔记]二分与分治
    [学习笔记]二项式反演
  • 原文地址:https://www.cnblogs.com/zhaopp/p/11487321.html
Copyright © 2020-2023  润新知