随笔 - 56  文章 - 0 评论 - 0 阅读 - 50756

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package main
 
import "fmt"
 
func main(){
 
    //数组
    var a = [3]int{}//相当于[3]int{0,0,0}
    a[0] = 1
    changeArray(a)
    fmt.Println(a)
 
    b := [...]int{1,2,3}//省略号符号表示让编译器根据后面初始化情况自动计算数组的长度,但这个长度是编译时确定的
    fmt.Println(b)
 
    c := new([3]int)  //new 返回的是地址,但是一样可以用 pointName[index] 访问,但是输出时需要取地址对应的值
    c[1] = 17  //这里和 (*c)[1] 等效 , 但不象 c 一样支持指针运算,除非使用 unsafe 模块
    fmt.Println(*c)
 
    /////////////////////////////////////////////////////////////
 
    //切片
    d := []int{0,0,0} //跟数组类似,但不指定长度
    d[0] = 1
    fmt.Println(d)
 
    e := make([]int,5,10) //make 只能创建 slice,map,chanel,且返回引用,new 可以创建任何类型,返回地址
    e[1] = 12
    fmt.Println(e)
    changeSlice(e)
    fmt.Println(e)
 
    f := *new([]int) // new 可以创建任何类型并返回地址,但不能用参数指定大小,这个方法非常不常用
    f = append(f,1,2,3)
    fmt.Println(f)
 
    g := c[:]  //基于数组创建切片,这个方法非常简单实用[:] 表示所有元素还可以用 [m:] [:n] [m:n]
    //对数组的一次切片操作后即返回切片
    fmt.Println(g)
}
 
// 数组是传值引用,因此函数对数组的修改不影响原值 而且[3]int 和 [4]int 是不同的类型
// 如果必须要改变数组的值,需求明确指定传递数组的指针
// 例如这里用 changeArray(x *[3]int) , 调用时用 changeArray(&a)
func changeArray(x [3]int){
    x[1] = 100
}
 
//切片传的是引用,因此函数对切片的修改影响原值
func changeSlice(x []int){
    x[1] = 100
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main
 
import "fmt"
 
func main() {
 
    v := 3
    p := &v
 
    fmt.Println(v) //3
    fmt.Println(p) //0xc042050080
 
    changeV(p)
    changeP(p)
 
    fmt.Println(v) //10
    fmt.Println(p) //0xc042050080
}
//将一个变量的地址以传值的方式传入函数,虽然传递的是地址副本但指向的地址却不是副本仍是原址
//所以对它的修改会影响到变量的值
func changeV(p *int)  {
    *p = 10
}
 
//而修改指针本身,由于传入的是指针变量的副本,所以对它的修改不会影响到原指针变量的指向
func changeP(p *int)  {
    p = new(int)
}
posted on   scala  阅读(202)  评论(0)    收藏  举报
编辑推荐:
· Hangfire Redis 实现秒级定时任务,使用 CQRS 实现动态执行代码
· Android编译时动态插入代码原理与实践
· 解锁.NET 9性能优化黑科技:从内存管理到Web性能的最全指南
· 通过一个DEMO理解MCP(模型上下文协议)的生命周期
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
阅读排行:
· 工良出品 | 长文讲解 MCP 和案例实战
· 多年后再做Web开发,AI帮大忙
· centos停服,迁移centos7.3系统到新搭建的openEuler
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 上周热点回顾(4.14-4.20)
点击右上角即可分享
微信分享提示