码迷,mamicode.com
首页 > 其他好文 > 详细

指针、函数

时间:2018-01-01 23:33:12      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:package   种类   数列   nic   none   img   font   技术分享   bubuko   

指针类型 

普通类型,变量量存的就是值,也叫值类型。指针类型存的是地址 

获取变量量的地址, 用&, 比如: var a int, 获取a的地址:&a

指针类型,变量量存的是一个地址,这个地址存的才是值

获取指针类型所指向的值,使用:*, 比如:var *p int, 使用*p获取p指向的值

技术分享图片

 

技术分享图片
package main

import(
    "fmt"
)

func test1() {
    var a int
    a = 10
    fmt.Println(a)

    var b *int
    fmt.Printf("%p\n", &b)   //指针这个变量的内存地址
    fmt.Printf("%p\n", b)    //指针的内存地址
    fmt.Printf("%p\n", a)    //常量
    fmt.Printf("%p\n", &a)   //常量的内存地址

    b = &a                   //将常量的内存地址指向指针
    fmt.Printf("%d\n", *b)

    *b = 100                 //改变指针内存对应的值
    fmt.Printf("a=%d\n", a)
}

func modify(a *int) {
    *a = 100
}

func test2() {
    var b int = 1
    var p *int 
    p =  &b
    modify(p)
    fmt.Println(b)
}

func test3() {

    //p 默认初始化nil
    //指针的初始化
    var p *int
    var b int
    p = &b
    *p = 200 //b = 200
    fmt.Printf("%p %p %p\n", p, &b, &p)
    
    //指针的初始化
    p = new(int)
    *p = 1000
    fmt.Printf("%d\n", *p)
    fmt.Printf("%p %p %p\n", p, &b, &p)
    //指针类型的变量初始化:1. 使用其他变量地址给它赋值。 2. 使用new分配。
}

func test4(){
    var p *string    
    //1. 第一种方式  使用new分配。
    p = new(string)
    *p = "abc"
    fmt.Println(*p)

    //2. 第二种方式  使用其他变量地址给它赋值。
    var str string = "hello word"
    p = &str
    fmt.Println(*p)
}

func test5(){
    //make和new的区别
    var a []int
    a  = make([]int, 10)
    a[0] = 100
    fmt.Println(a)

    var p *[]int   
    p = new([]int) //给指针分配内存地址 
    (*p) = make([]int, 10)  //初始化切片
    (*p)[0] = 100
    fmt.Println(p)

    p = &a 
    (*p)[0] = 1000
    fmt.Println(a)
}

func modify_arr(a []int) {
    fmt.Printf("modify:%p\n", a)
    a[0] = 100   //改变数据的的值
}

func test6() {
    var a[6]int 
    fmt.Printf("test6:%p\n", &a)
    modify_arr(a[:])  //切片是引用类型数据
    fmt.Println(a)
}

func main() {
    //test1()
    //var a int
    //test2(&a)
    //fmt.Println(a)
    //test3()
    //test4()
    //test5()
    test6()
}
View Code

内置函数

1、close:主要 用来关闭channel 

2、len: 用来求 长度, 比如string、array、slice、map、channel 

3、new: 用来分配内存,主要用来分配值类型, 比如int、struct、string。返回的是指针 

4、make: 用来分配内存,主要用来分配引 用类型, 比如chan、map、slice 

5、append: 用来追加元素到数组、slice中 

6、panic和recover: 用来做错误处理理 

7、new和make的区别

技术分享图片

 

 

函数

1、声明语法:func 函数名 (参数列列表) [(返回值列列表)] {}

func add() {

}

func add(a int, b int) {

 }

func add(a int, b int) int { 

}

func add(a int, b int) (int, int) {

 }

func add(a, b int) (int, int) {

 }

2、golang函数特点: 

不支持重载, 一个包不能有两个名字 一样的函数 

函数是一等公 民,函数也是一种类型, 一个函数可以赋值给变量量 

匿匿名函数 

多返回值

package main

import "fmt"

func add(a, b int) int {
  return a + b
}

func main() {
  //函数是一等公民,也可以和变量量一样进行行赋值
  c := add
  fmt.Printf("%p %T %p %T\n", c, add, c,add)
  sum := c(10, 20)
  fmt.Println(sum)
  sum = add(10, 20)
  fmt.Println(sum)

}

 

指针、函数

标签:package   种类   数列   nic   none   img   font   技术分享   bubuko   

原文地址:https://www.cnblogs.com/domestique/p/8169038.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!