go語言傳遞物件和傳遞指標物件的區別

2021-10-12 08:16:49 字數 1132 閱讀 1592

晚上看到很多方法裡面傳遞了物件還傳遞了指標物件,但是感覺之前學習的時候,傳遞指標物件和傳遞物件沒有什麼區別(取值上面),就開始了這個問題。

問題就是兩者都是傳遞,都可以取到正確的值,但是為什麼要分開傳遞呢?

結論的話:

func

main()

fmt.

println

("傳遞之前:"

, stu.name)

fmt.

println(,

&stu.name)

tt(stu)

fmt.

println

("傳遞物件之後:"

, stu.name)

tt2(

&stu)

fmt.

println

("傳遞指標物件之後:"

, stu.name)

}/**

指標與非指標傳遞的區別在於:

如果是指標變數傳遞,所有的傳遞修改都是直接修改的位址

而如果是物件的話,傳遞的則是乙份拷貝的物件而已,並不是真實的物件

*/func

tt(stu student)

func

tt2(stu *student)

type student struct

具體的輸出如下:

從結果中可以看到傳遞物件,而tt()方法並沒有返回值,故並沒有改變實際的引數值,而且對於傳遞物件來說可以看到stu.name的位址與原物件位址不一致,則表明為拷貝的乙份物件。

而傳遞指標的tt2()方法也沒有返回值,但是因為傳遞的是指標,即原物件的位址,在輸出中可以看到,其引數stu.name的位址與原物件位址是一致的,而且後續引數值的修改輸出也驗證了,tt2()方法可以直接修改原物件。

從上面的結論和驗證可以看出,傳遞物件和傳遞指標物件差異在於傳遞副本還是傳遞原物件位址。

keep thinking, keep coding! 2023年12月17日22:37:14 寫於南京 加油!

C語言傳遞指標引數

簡單來說,指標是乙個儲存計算機記憶體位址的變數。所有的指標都儲存了記憶體位址。它們的型別只在取值時起作用。指標在c語言中是個十分重要的概念,可以搜尋相關資料進行深入學習,也可以參考 c語言指標簡介 簡單了解。c語言函式引數傳遞有兩種方式,一種是傳值呼叫,一種是傳址呼叫。那麼如果指標作為引數,應該怎麼...

Go語言傳遞變長引數

如果函式的最後乙個引數是採用.type的形式,那麼這個函式就可以處理乙個變長的引數,這個長度可以為 0,這樣的函式稱為變參函式。func myfunc a,b,arg int 這個函式接受乙個類似某個型別的 slice 的引數 詳見第 7 章 該引數可以通過第 5.4.4 節中提到的 for 迴圈結...

指標和引數傳遞 Go語言

獲取變數的位址 go語言的取位址符 乙個變數前使用 會返回該變數的記憶體位址。func main 指標特點 t是指標變數的型別,它指向t型別的值。var 指標變數名 指標型別 定義指標變數 為指標變數賦值 訪問指標變數中指向位址的值 獲取指標的值 在指標型別的變數前加上 號來獲取指標所指向的內容 g...