结构体指针数组和结构体数组指针的区别

Posted zhaopp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体指针数组和结构体数组指针的区别相关的知识,希望对你有一定的参考价值。

对于初学者的我来说,面对又是数组又是结构体还有指针,一下子就蒙了,在网上查找资料也没有相应的介绍,经过我的测试终于明白了其中的猫腻:
结构体数组指针 *[]struct:结构体数组指针的指针是数组的指针,即表示数组的地址,数组里面存放的是结构体类型
结构体指针数组 []*struct:即指针表示结构体的地址,数组里面存放的是结构体的指针
有什么解释不对的地方请指正

代码测试:
package mainimport (
"fmt"
)

type XCDataStu struct {
Id int `json:"id" xorm:"id"`
Name string `json:"name" xorm:"name"`
}

//结构体数组指针
func testArray(xcdata *[]XCDataStu) {
fmt.Println(*xcdata)
}

//结构体指针数组,在切片中传的是结构体的指针
func testStruct(xcdata []*XCDataStu) {
fmt.Printf("结构体指针数组:%v ", xcdata)
//fmt.Printf("结构体指针数组:%v ", &xcdata)
for index, data := range xcdata {
fmt.Printf("index:%v,data:%v ", index, *data)
}
}
func main() {
xcData := []XCDataStu{
XCDataStu{Id: 758, Name: "David758"},
XCDataStu{Id: 759, Name: "David759"}, //结构体数组的定义和初始化,逗号别少了
}
fmt.Println(xcData)
fmt.Printf("=================== ")
var xcdata *[]XCDataStu //指针指向
xcdata = &xcData
fmt.Println(*xcdata)

fmt.Printf("==========结构体数组指针========= ")
testArray(&xcData) //指针作为参数

fmt.Printf("==========结构体指针数组========= ")
data := []*XCDataStu{
&XCDataStu{Id: 758, Name: "David758"},
&XCDataStu{Id: 759, Name: "David759"},
}
testStruct(data)
}

以上是关于结构体指针数组和结构体数组指针的区别的主要内容,如果未能解决你的问题,请参考以下文章

go语言基础函数,数组,指针,结构体

(60) 结构体指针结构体变量嵌套结构体指针嵌套函数指针数组指针指针数组typedef 综合运用

python如何定义二维结构体数组?

数组与结构体的区别

C++结构体指针数组如何分配空间,用new

C#如何调用C++的DLL的结构体数组指针