• go语言学习一


    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
    }
    

    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)
    }
    
  • 相关阅读:
    《大道至简》读后感
    第一周学习总结-Java
    c++与java的几个不同点
    单调队列 滑动窗口模型
    计算空间
    关于dp初始化问题
    康托展开小结-
    Vm-Ubuntu下配置Qt开发环境
    C++学习013多态
    C++学习012友元
  • 原文地址:https://www.cnblogs.com/scala/p/9537649.html
Copyright © 2020-2023  润新知