设为首页 收藏本站
查看: 743|回复: 0

[经验分享] golang学习之指针、内存分配

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2018-9-20 10:42:53 | 显示全部楼层 |阅读模式
1 func pointer_test() {  

2     //空指针,输出为nil  
3     var p *int
  
4     fmt.Printf("p: %v\n", p)
  
5     //指向局部变量,变量值初始为0
  
6     var i int
  
7     p = &i
  
8     fmt.Printf("p: %v,%v\n", p, *p)
  
9     //通过指针修改变量数值
  
10     *p = 8
  
11     fmt.Printf("p: %v,%v\n", p, *p)
  
12     //数组的初始化及输出
  
13     m := [3]int{3, 4, 5}
  
14     fmt.Printf("m:%v--%v,%v,%v\n", m, m[0], m[1], m[2])
  
15     //指针数组的初始化及输出
  
16     //j, k, l := 3, 4, 5
  
17     //x := [3]*int{&j, &k, &l}
  
18     x := [3]*int{&m[0], &m[1], &m[2]}
  
19     fmt.Printf("x:%v,%v,%v\n", x[0], x[1], x[2])
  
20     fmt.Printf("*x:%v,%v,%v\n", *x[0], *x[1], *x[2])
  
21
  
22     var n [3]*int
  
23     n = x
  
24     fmt.Printf("n:%v,%v,%v\n", n[0], n[1], n[2])
  
25     //指向数组的指针,也即二级指针的使用
  
26     y := []*[3]*int{&x}
  
27     fmt.Printf("y:%v,%v\n", y, y[0])
  
28     fmt.Printf("*y[0]:%v\n", *y[0])
  
29     fmt.Printf("*y[][]:%v,%v,%v\n", *y[0][0], *y[0][1], *y[0][2])
  
30     /*
  
31         *X            ->    v
  
32         [3]X        ->    [v0][v1][v2]
  
33         []X            ->    [v0]...[vi]
  
34         [3]*X        ->    [p0][p1][p2]
  
35                           |   |   |
  
36                           j   k   l
  
37         []*[3]*X    ->    [n0]...[ni]
  
38                           | ... |
  
39                          [p0]->j
  
40                          [p1]->k
  
41                          [p2]->l
  
42     */
  
43 }
  
44
  
45 type Student struct {
  
46     name  string

  
47    >  
48     score uint
  
49 }
  
50
  
51 func memery_test() {
  
52     //new分配出来的数据是指针形式
  
53     p := new(Student)
  
54     p.name = "China"
  
55     p.id = 63333
  
56     p.score = 99
  
57     fmt.Println(*p)
  
58     //var定义的变量是数值形式
  
59     var st Student
  
60     st.name = "Chinese"
  
61     st.id = 666333
  
62     st.score = 100
  
63     fmt.Println(st)
  
64     //make分配slice、map和channel的空间,并且返回的不是指针
  
65     var ptr *[]Student
  
66     fmt.Println(ptr)     //ptr == nil
  
67     ptr = new([]Student) //指向一个空的slice
  
68     fmt.Println(ptr)
  
69     *ptr = make([]Student, 3, 100)
  
70     fmt.Println(ptr)
  
71     stu := []Student{{"China", 3333, 66}, {"Chinese", 4444, 77}, {"Chince", 5555, 88}}
  
72     fmt.Println(stu)
  
73 }



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-598755-1-1.html 上篇帖子: golang利用gob序列化struct对象保存到本地 下篇帖子: golang 自定义封包协议(转的)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表