1.ポインタ
実行時に、各変数がアドレスを有し、アドレスがメモリ内の可変位置を表します。
使用言語行く&
変数「フェッチアドレス」操作の前に置かれた変数のシンボルのために。
1.指针默认值nil 2.通过&(取地值符)取变量地址 3.通过*(取值符)透过指针访问目标值
フォーマット:
age := 18 ptr:=&age //age是变量名,&age是取age的内存地址,地址交给ptr变量接收,ptr类型是*int
まず、などの基本データ型、name="yugo"
変数name
格納された値yugo
1)基本データ型、变量
記憶されている值
と呼ばれる值
タイプ
2)&
シンボル獲得变量
の地址
、例えば&name
3)指针类型
変数、別の変数に格納され内存地址
、この地址
点は空間に格納されます。值
4)取得指针类型
ポイントを值
使用して、*
例えば*ptr
、値を得るために*のPTRを使用するPTRによって指さ
package main import ( "fmt" ) func main() { var name string = "yugo" //查看name变量的内存地址,通过&name取地址 fmt.Printf("name的内存地址:%v\n", &name) //指针变量,存的是内存地址 //ptr指针变量指向变量name的内存地址 var ptr *string = &name fmt.Printf("指针变量ptr的内存地址:%v\n", ptr) //获取指针变量的值,用*ptr //*ptr表示读取指针指向变量的值 fmt.Printf("指针变量ptr指向的值是:%v\n", *ptr) }
5)値型(整数、フロート、ブール、文字列、アレイ、構造体)は、対応するポインタ型を有します
例えば、
*int
および*string
ように
値6)ポインタ型変数交換
//想要交换ab的值 func exchange(a, b *int) { *a, *b = *b, *a } func main() { a, b := 3, 4 exchange(&a, &b) fmt.Println(a, b) }
7)新しい()関数を使用してポインタを作成します
func main() { s1 := new(string) //new函数返回指针类型*string,用s1指针变量存储 fmt.Printf("s1类型:%T s1指针变量存储的内存地址是:%v\n", s1, s1) //s1类型*string,值是空字符串的内存地址 //s1="哈哈" 错误写法,s1存储的内存地址 *s1 = "马云说我不爱钱" //*s1取内存地址指向的值 fmt.Println(*s1) }