美文网首页go学习程序员Golang语言社区
17. 结构体及用指针访问结构体

17. 结构体及用指针访问结构体

作者: 厚土火焱 | 来源:发表于2017-08-13 12:52 被阅读122次

结构体是个很有用的东西,在用计算机语言描述现实世界里的东西时,不得不大量的使用它。把现实世界的某一样东西的各种属性,用一个一个的变量记录下来。
最简单的比如:平面坐标
平面坐标有两个值,X和Y
在go语言中可以这样定义一个坐标的结构体

type Coodinate struct{
    X int
    Y int
}

由于定义一个结构体是为了各种地方都能够调用,甚至外部调用。所以,无论是结构体的命名,还是结构体结构内部的组成元素都是首字母大写。(go语言一个简单的规则,大写首字母可供外部调用,小写首字母只在一定范围内调用。)
下面简单打印一下这个坐标结构体吧。

package main

import (
    "fmt"
)
type Coodinate struct{
    X int
    Y int
}
func main() {
    fmt.Println(Coodinate{5, 10})
}

打印的结果也与一般的输出不同,结构体的输出是带有 { } 符号的。

{5 10}

结构提里的组成元素,称之为“字段”,可以使用符号 “.” 来访问。

Co := Coodinate{15, 20}
Co.X = 1973

上面的代码,初始化了一个结构体,又修改了其中X的值。
把刚才完整代码改一下

package main

import (
    "fmt"
)
type Coodinate struct{
    X int
    Y int
}
func main() {
    fmt.Println(Coodinate{5, 10})
    Co := Coodinate{15, 20}    //声明一个变量Co为结构体类型,并初始化。
    fmt.Println(Co)
    Co.X = 1973        //修改变量结构体的字段X值
    fmt.Println(Co)
}

运行结果是这样的

{5 10}
{15 20}
{1973 20}

可以看到,在代码中,既能够直接使用结构体,又可以声明一个变量为结构体。然后对变量进行操作,例如修改变量结构体里的某个字段。
还记得指针吗?指针重点你要知道是利用内存地址来操作数据。变量是结构体类型,一样有内存地址。取地址方法是变量前加 & 符号

&Co

下面看看用指针如何修改一个变量结构体的。

package main

import (
    "fmt"
)
type Coodinate struct{
    X int
    Y int
}
func main() {
    fmt.Println(Coodinate{5, 10})
    Co := Coodinate{15, 20}     //声明一个变量Co为结构体类型,并初始化。
    fmt.Println(Co)
    Co.X = 1973                 //修改变量结构体的字段X值
    fmt.Println(Co)

    //下面用指针访问结构体
    p := &Co
    p.X = 1975
    p.Y = 45
    fmt.Println("Pointer control result is", Co)
}

运行结果是这样的

{5 10}
{15 20}
{1973 20}
Pointer control result is {1975 45}

通过指针间接的访问是透明的。
结构体初始化的时候,不是必须给结构体内所有的字段都做初始化的。没有初始化的字段,会根据字段类型取它自己的零值(默认值)。方法如下

package main

import (
    "fmt"
)
type Coodinate struct{
    X int
    Y int
}
var(
    Co1 = Coodinate{73, 45}
    Co2 = Coodinate{X:75}
    Co3 = Coodinate{}
    p = &Coodinate{9, 17}
)
func main() {
    //结构体的初始化赋值
    fmt.Println(Co1, Co2, Co3, p, *p)
}

运行结果是这样的

{73 45} {75 0} {0 0} &{9 17} {9 17}

注意看 p 和 *p 的不同结果。p 返回的结果有一个特殊的前缀 &,是指向结构体的指针。
打印指针需要在变量前加 * 符号。所以是 *p 。

相关文章

  • 17. 结构体及用指针访问结构体

    结构体是个很有用的东西,在用计算机语言描述现实世界里的东西时,不得不大量的使用它。把现实世界的某一样东西的各种属性...

  • 6.结构体相关

    一 C 结构体和结构体指针 eg1: 一 结构体里面定义函数 通过结构体指针访问结构体里面定义的函数。 eg2:

  • C语言-结构体,文件操作

    1、结构体 结构体统一取别名,兼容多平台编译器 2、结构体指针 注意结构体指针采用->访问属性 3、文件操作 读文...

  • c语言 2018-05-29

    c语言文件结构 (-> and .) 定义结构体指针,访问成员时就用->定义结构体变量,访问成员时就用.例如:ty...

  • C语言20 结构体指针

    C语言20 结构体指针 探测结构体指针的特性 ++、-- 加法与减法 指针相减 使用结构体指针 结构体指针一定要指...

  • 结构体

    将多种类型的数据用一个类型来表示,但是只能声明变量,不能赋初值。 结构体的访问用“.”来访问。 结构体指针Stud...

  • 7.C语言 结构体

    结构体所占存储空间必须是最大成员所占字节数的倍数 指向结构体的指针 利用指针访问结构体的成员 (*p).成员名称 ...

  • C语言-5、结构体

    写法一 写法二 写法三 结构体指针 结构体指针 与 动态内存开辟 结构体的数组 结构体与结构体指针 取别名 取别名...

  • C语言基础及指针⑧文件IO

    接续上篇C语言基础及指针⑦结构体与指针在结构体与指针中 , 我们了解到结构体与java中的类相似 , 也是一种自定...

  • c++ 8、结构体

    1、结构以定义 2、访问结构成员 成员访问运算符.访问:结构体指针->访问:有如下代码>>>>>>: 运行结果: ...

网友评论

  • 知识学者:还以为是c,因为看多了struct。
    感觉类,比它好多了,还有函数
    厚土火焱:@东风冷雪 go的目标是互联网时代的c。

本文标题:17. 结构体及用指针访问结构体

本文链接:https://www.haomeiwen.com/subject/qdosrxtx.html