晚上看到很多方法裡面傳遞了物件還傳遞了指標物件,但是感覺之前學習的時候,傳遞指標物件和傳遞物件沒有什麼區別(取值上面),就開始了這個問題。問題就是兩者都是傳遞,都可以取到正確的值,但是為什麼要分開傳遞呢?
結論的話:
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...