Go语言基础第06天(结构体和指针)
1.练习
package mainimport "fmt"func main0101() {//ssdjfhjkahsjdsdjvar arr [20]bytefor i := 0; i < len(arr); i++ {fmt.Scanf("%c", &arr[i])}m := make(map[byte]int)for i := 0; i < len(arr); i++ {m[arr[i]]++}for k, v := range m {if v > 0 {//fmt.Println(k,v)fmt.Printf("%c %d\n", k, v)}}
}
2.结构体定义和使用
type Student struct {id intname stringsex stringage intaddr string
}func main0201() {//通过结构体名 定义结构体变量//var s Student结构体变量名.成员名//s.id=101//s.name="张飞"//s.sex="男"//s.age=28//s.addr="北京燕郊"////fmt.Println(s)//var s Student=Student{101,"关羽","男",29,"山西运城"}s := Student{age: 30, id: 103, name: "刘备", addr: "巴蜀", sex: "男"}fmt.Println(s.id)fmt.Println(s.name)fmt.Println(s.sex)fmt.Println(s.age)fmt.Println(s.addr)
}
3.结构体的赋值和比较
type Students struct {id intname stringsex stringage intaddr string
}func main0301() {s := Students{101, "貂蝉", "女", 18, "徐州"}//结构体变量赋值s1 := ss1.age = 22fmt.Println(s1)fmt.Println(s)//在结构体中使用== != 可以对结构体成员进行比较操作if s1 == s {fmt.Println("相同")} else {fmt.Println("不相同")}//大于 小于可以比较结构体成员if s.age > s1.age {fmt.Println("真")} else {fmt.Println("假")}}
4.结构体数组和切片
type student struct {id intname stringsex stringage intscore intaddr string
}func main0401() {//var 结构体变量名 结构体类型//定义结构体数组//var 结构体数组名 [元素个数]结构体类型var arr [5]student//len(数组名)计算数组元素个数//fmt.Println(len(arr))for i := 0; i < len(arr); i++ {fmt.Scan(&arr[i].id, &arr[i].name, &arr[i].sex, &arr[i].age, &arr[i].score, &arr[i].addr)}//结构体 排序 根据结构体成员进行排序/*101 孙尚香 女 16 88 江东102 黄月英 女 28 90 襄阳103 大乔 女 26 70 江东104 小乔 女 24 60 江东105 甄姬 女 20 50 许昌*/for i := 0; i < len(arr)-1; i++ {for j := 0; j < len(arr)-1-i; j++ {//比较结构体成员 年龄 成绩if arr[j].score > arr[j+1].score {//结构体数组中的元素 允许相互赋值 将结构体成员中的所有数据进行相互交换//arr[j],arr[j+1]=arr[j+1],arr[j]//结构体成员依次交换 不建议采用//arr[j].id,arr[j+1].id=arr[j+1].id,arr[j].id//arr[j].name,arr[j+1].name=arr[j+1].name,arr[j].name//arr[j].sex,arr[j+1].sex=arr[j+1].sex,arr[j].sex//arr[j].score,arr[j+1].score=arr[j+1].score,arr[j].score//arr[j].age,arr[j+1].age=arr[j+1].age,arr[j].age//arr[j].addr,arr[j+1].addr=arr[j+1].addr,arr[j].addr}}}for i := 0; i < len(arr); i++ {fmt.Println(arr[i])}}
func main0402() {//[元素个数]数组 []切片lenarr := []student{{101, "曹操", "男", 58, 90, "许昌"},{102, "夏侯惇", "男", 40, 100, "荆州"},{103, "张辽", "男", 38, 99, "许昌"}}//在切片中添加数据arr = append(arr, student{104, "许褚", "男", 28, 99, "许昌"})arr = append(arr, student{105, "典韦", "男", 38, 99, "许昌"})for i, v := range arr {fmt.Println(i, v)}
}
5.结构体作为map的值
type stu struct {name stringage intscore int
}func main0501() {//定义mapm := make(map[int]stu)m[101] = stu{"周瑜", 28, 101}m[102] = stu{"孙策", 32, 78}//fmt.Println(m)for k, v := range m {fmt.Println(k, v)}}
func main0502() {m := make(map[int][]stu)m[101] = append(m[101], stu{"曹操", 50, 88}, stu{"张辽", 38, 98}, stu{})m[102] = append(m[102], stu{"刘备", 50, 88}, stu{"张飞", 38, 98})m[103] = append(m[103], stu{"孙权", 50, 88}, stu{"甘宁", 38, 98}, stu{"太史慈", 38, 98})//m[101][1].name="张文远"for k, v := range m {for i, data := range v {if data.name == "张飞" {fmt.Println(k, i, data)}//fmt.Println("key:",k,"index",i,"value:",data)}}}
6.结构体作为函数参数
type person struct {id intname stringscore intsex string
}func test(s person) {//fmt.Println(s.name)//fmt.Println(s.score)//fmt.Println(s.sex)s.name = "李逵"
}func main0601() {stu := person{101, "宋江", 9, "男"}//结构体作为函数参数 值传递test(stu)fmt.Println(stu)}
// 所有的切片都属于地址传递
func test1(stu []person) {stu[0].name = "晁盖"}
func main() {//结构体切片stus := []person{{101, "宋江", 9, "男"},{102, "卢俊义", 99, "男"}}//为切片添加信息stus = append(stus, person{103, "吴用", 88, "男"})//结构体切片作为函数参数是地址传递//结构体数组作为函数参数是值传递test1(stus)fmt.Println(stus)
}
7.结构体实际开发使用
package main/*
type skills struct{名称耗蓝CD 冷却时间范围伤害
}
定义结构体切片 保存技能信息type role struct{名称等级 lv经验 exp钻石金币生命值 hp攻击力暴击防御蓝量mp
}
*//*
type 信用卡 struct{卡号持卡人姓名额度有效期密码银行信息
}type 消费记录 struct{卡号消费时间消费id流水号消费金额备注
}
*/func main0701() {}
8.结构体练习
// 定义结构体存储5名学生 三门成绩 求出每名学生的总成绩和平均成绩
type stud struct {id intname stringscore []int //结构体成员为数组|切片
}func main0801() {arr := []stud{{101, "小明", []int{100, 99, 88}},{102, "小红", []int{88, 56, 83}},{103, "小刚", []int{18, 57, 81}},{104, "小强", []int{48, 66, 93}},{105, "小花", []int{98, 50, 89}}}//五名学生for i := 0; i < len(arr); i++ {//三门成绩sum := 0for j := 0; j < len(arr[i].score); j++ {sum += arr[i].score[j]}fmt.Printf("第%d名学生总成绩为:%d 平均成绩:%d\n", i+1, sum, sum/3)}
}
9.指针变量定义和使用
func main0901() {var a int = 123//定义整型指针变量 指向a的地址//指针类型定义//var 指针 *数据类型 一级指针var p *int//将a的地址赋值给指针变量pp = &a//通过指针变量 间接访问变量对应的内存空间*p = 345fmt.Println(a)//fmt.Println(*p)//fmt.Println(p)//fmt.Println(&a)}
func main0902() {//a:=10//p:=&a////*p=123//fmt.Println(a)//fmt.Printf("%T",p)//声明了一个指针 默认值为nil(空指针 值为0)指向了内存地址编号为0 的空间//0-255为系统占用 不允许用户进行读写操作var p *int //空指针//p=a//err//p=0xc042058080//野指针 指针变量指向了一个未知的空间//访问野指针和空指针对应的内存空间都会报错//*p=123//*p=123//errfmt.Println(p)
}
10.指针变量的new
func main() {var p *int //nilfmt.Println(p)//为指针变量创建一块内存空间//在堆区创建空间p = new(int) //new 创建好的空间值为数据类型的默认值//打印p的值fmt.Println(p)//打印p指向空间的值fmt.Println(*p)}
11.指针作为函数参数
// func swap(a int, b int) {// a, b = b, a
// }
//
// 函数参数为指针类型
func swap(a *int, b *int) {//*a 值//*a, *b = *b, *atemp := *a*a = *b*b = temp
}func main1101() {a := 10b := 20//不能交换a b 的值 值传递//swap(a,b)//指针作为函数参数是地址传递swap(&a, &b)fmt.Println(a)fmt.Println(b)
}
Go语言基础第06天(结构体和指针)相关推荐
- c语言record的作用,C语言基础 record 2-指针,结构体,链表,文件的输入输出
指针: 1.指针的概念: 内存区的每一个字节有一个编号,这就是 '地址',由于通过地址能找到所需的变量单元,而地址指向该变量单元,所以将地址形象化称为 '指针'.C/C++中是可多继承的指针,而Jav ...
- 【C语言基础】练习:结构体统计学生成绩,快递费用计算
每日练习一:结构体统计学生成绩 题目要求:有3名学生,每个学生的数据包括学号.姓名.3门课的成绩,从键盘输入3个学生的数据,打印出每个学生的平均成绩,以及最高分学生的数据(包括学号.姓名.3门课的成绩 ...
- python中的记录指针_使用Python向C语言的链接库传递数组、结构体、指针类型的数据...
使用python向C语言的链接库传递数组.结构体.指针类型的数据 由于最近的项目频繁使用python调用同事的C语言代码,在调用过程中踩了很多坑,一点一点写出来供大家参考,我们仍然是使用ctypes来 ...
- python结构体数组传出接收c动态库_使用Python向C语言的链接库传递数组、结构体、指针类型的数据...
使用python向C语言的链接库传递数组.结构体.指针类型的数据 由于最近的项目频繁使用python调用同事的C语言代码,在调用过程中踩了很多坑,一点一点写出来供大家参考,我们仍然是使用ctypes来 ...
- c语言用数组直接填充结构体,C语言第11题:结构体数组的定义与使用 + 结构体数组排序...
C语言第11题:结构体数组的定义与使用 + 结构体数组排序 C语言第11题:结构体数组的定义与使用 + 结构体数组排序 注意: 一下赋值是不能使用的 但是在结构体中是可以直接进行赋值操作的 st[1] ...
- Go 语言快速入门指南:结构体
Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念. Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 1. 类型别名和自 ...
- Go语言全栈开发:结构体
文章目录 类型别名和自定义类型 结构体 练习题 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象 ...
- c 结构体 不允许使用不完整的类型_C语言必学知识点 quot;结构体quot;详细解析!...
结构体是经常用到的数据类型,使用频率不亚于指针,所以需要重视,不过用法非常简单. 一.什么是结构体 ☀ 在前面的时候已经介绍了C语言中的数组,用法跟其他语言差不多.当一个整体由多个数据构成时,我们可以 ...
- c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针...
1.指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内浅显的例子就不举了,这里举几个比较隐蔽的例子. 1.1结构体成员指针未初始化 1 2 3 4 5 6 ...
- C语言 匿名联合体和匿名结构体
C语言 匿名联合体和匿名结构体 匿名联合体和匿名结构体顾名思义,就是没有名字的联合体和结构体,没有名字哪怎么用?拿来用? 在嵌入式数据通信里面,大部分都是使用联合体,将有实际意义的结构体和字节数组互相 ...
最新文章
- mysql注册数据库_基于mysql数据库的注册
- 关于CLSCompliant
- php 开发商城 注意,php开发微商城要注意什么
- linux传输文件到linux速度慢,linux中往nand(jffs2)中拷贝文件时速度慢的问题
- 胡兴梅博士谈沟通技巧
- ssh远程登录执行shell脚本,找不到jps
- 对“反射”的深入认识,你会发觉跟“解剖”一样
- 如何使用Linux的Crontab定时执行PHP脚本的方法
- 视频编码器的智能化——AI辅助编解码的ASIC解决方案
- ip中继对接_朗视IPPBX为桃源居中澳实验学校打造IP语音校园!
- select命名_Maya中Pymel写个带界面的重命名工具(一)
- 软件项目估算是一件很难的事情
- 陕西西咸新区沣西新城大数据产业发展思考
- Android单元测试Junit的配置
- linux运行raxml,在线和本地两种方法构建 RAxML 进化树方法和解读
- 音乐Npc弹窗 c#
- 设置linux服务器时间自动同步
- 工业制造中的大数据分析应用_工业大数据分析方案-美林数据
- 医院PACS系统源码 PACS信息系统源码
- iphone开源汇总