GoLang 基础语法(八)
1.指针初识
func main ( ) {
a := 10
fmt. Println ( a)
fmt. Printf ( "%T\n" , a)
fmt. Printf ( "%p\n" , & a)
var p1 * int
fmt. Println ( p1)
p1 = & a
fmt. Println ( p1)
fmt. Println ( "p1指针自己的地址是:" , & p1)
fmt. Println ( "p1指针对应存储的数值是:" , * p1)
a = 100
fmt. Println ( a)
fmt. Printf ( "%p\n" , & a)
* p1 = 200
fmt. Println ( a)
var p2 * * int
fmt. Println ( p2)
p2 = & p1
fmt. Println ( p2)
fmt. Println ( "p2指针自己的地址是:" , & p2)
fmt. Println ( "p2对应的值" , * * p2)
}
2.数组指针和指针数组
数组指针:是指存储数组的地址的指针 指针数组:是指用数组去存储指针
func main ( ) {
arr1 := [ 4 ] int { 1 , 2 , 3 , 4 }
fmt. Println ( arr1)
var p1 * [ 4 ] int
fmt. Println ( p1)
p1 = & arr1
fmt. Printf ( "%p\n" , p1)
fmt. Println ( & p1)
( * p1) [ 0 ] = 100
fmt. Println ( * p1)
p1[ 1 ] = 200
fmt. Println ( arr1)
fmt. Println ( "--------------------------" )
a := 1
b := 2
c := 3
d := 4
arr2 := [ 4 ] int { a, b, c, d}
arr3 := [ 4 ] * int { & a, & b, & c, & d}
fmt. Println ( arr2)
fmt. Println ( arr3)
arr2[ 0 ] = 100
fmt. Println ( arr2)
fmt. Println ( a)
* arr3[ 0 ] = 200
fmt. Println ( arr3)
fmt. Println ( a)
b = 999
fmt. Println ( arr2[ 1 ] )
fmt. Println ( * arr3[ 1 ] )
}
3.函数指针和指针函数
func main ( ) {
var fun func ( )
fun = MyTest01
fun ( )
arr1 := MyTest02 ( )
fmt. Printf ( "%p\n" , & arr1)
arr2 := MyTest03 ( )
fmt. Printf ( "%p\n" , arr2)
}
func MyTest02 ( ) [ 4 ] int {
arr := [ 4 ] int { 1 , 2 , 3 , 4 }
fmt. Printf ( "%p\n" , & arr)
return arr
}
func MyTest03 ( ) * [ 4 ] int {
p := & [ 4 ] int { 5 , 6 , 7 , 8 }
fmt. Printf ( "%p\n" , p)
return p
}
func MyTest01 ( ) {
fmt. Println ( "这是测试函数" )
}
4.函数指针作为参数
func main ( ) {
a := 1
Func1 ( a)
fmt. Println ( a)
Func2 ( & a)
fmt. Println ( a)
fmt. Println ( "---------------------" )
arr := [ 4 ] int { 1 , 2 , 3 , 4 }
Func3 ( arr)
fmt. Println ( arr)
Func4 ( & arr)
fmt. Println ( arr)
}
func Func3 ( arr [ 4 ] int ) {
arr[ 0 ] = 999
}
func Func4 ( arr * [ 4 ] int ) {
arr[ 0 ] = 666
}
func Func1 ( num int ) {
num = 999
}
func Func2 ( num * int ) {
* num = 666
}
5.结构体初识
func main ( ) {
var person1 Person
person1. age = 18
person1. name = "zzs"
person1. sex = true
person1. address = "北京"
fmt. Println ( person1)
person2 := Person{ }
person2. age = 19
person2. name = "ywj"
person2. sex = false
person2. address = "天津"
fmt. Println ( person2)
person3 := Person{
name: "wy" ,
age: 20 ,
sex: true ,
address: "辽宁" ,
}
fmt. Println ( person3)
person4 := Person{ "pnb" , 21 , true , "上海" }
fmt. Println ( person4)
}
type Person struct {
name string
age int
sex bool
address string
}
6.结构体指针
func main ( ) {
person1 := MyPerson{ "zzs" , 18 , true }
fmt. Println ( person1)
person2 := person1
person2. age = 19
person2. name = "ywj"
person2. sex = false
fmt. Println ( person1)
fmt. Println ( person2)
var person3 * MyPerson = & MyPerson{
name: "zzs" ,
age: 18 ,
sex: true ,
}
fmt. Println ( person3)
person4 := person3
person4. name = "ywj"
person4. sex = false
person4. age = 19
fmt. Println ( person3)
fmt. Println ( person4)
person5 := new ( MyPerson)
person5. name = "zzs"
person5. sex = true
person5. age = 18
fmt. Println ( person5)
}
type MyPerson struct {
name string
age int
sex bool
}
7.结构体的匿名字段
func main ( ) {
s1 := struct {
name string
age int
} { name: "zzs" , age: 18 }
fmt. Println ( s1)
w1 := Worker{
"zzs" , 10 ,
}
fmt. Println ( w1)
fmt. Println ( w1. string )
fmt. Println ( w1. int )
}
type Worker struct {
string
int
}
8.结构体的嵌套
func main ( ) {
var s1 Student
s1. name = "zzs"
s1. age = 18
var book Book
book. name = "C#"
book. price = 210
s1. book = book
fmt. Println ( s1)
fmt. Println ( s1. name)
fmt. Println ( s1. age)
fmt. Println ( s1. book)
fmt. Println ( s1. book. name)
fmt. Println ( s1. book. price)
var s2 = s1
s2. book. name = "JAVA"
fmt. Println ( s2)
fmt. Println ( s1)
fmt. Println ( "---------------------------------" )
var st1 = Student1{ name: "zzs" , age: 18 , book: & Book{ name: "PHP" , price: 879 } }
fmt. Println ( * st1. book)
var st2 = st1
st2. book. name = "Python"
fmt. Println ( * st1. book)
}
type Student struct {
name string
age int
book Book
}
type Student1 struct {
name string
age int
book * Book
}
type Book struct {
name string
price int
}