C Golang中的值傳遞和指標傳遞

2021-07-23 02:20:48 字數 2335 閱讀 3420

-------------------------golang----------------------------------------------

package main

import "fmt"

func a(m

int, n int)

func main()

fmt.printf("-----------origin--------------------\n")

fmt.printf("befter : &m=%p,&n=%p,n=%p\n", &m, &n, n)

fmt.printf(" m=%d,n=%v\n", m, n)

fmt.printf("-----------call a--------------------\n")

a(m, n)

fmt.printf("------------end-------------------\n")

fmt.printf("end : &m=%p,&n=%p,n=%p\n", &m, &n, n)

fmt.printf(" m=%d,n=%v\n", m, n)

}

執行結果:

before : &m=0x7ffcf9f5de48,&n=0x7ffcf9f5de40,n=0xcf1010

call a: &m =0x7ffcf9f5de2c,&n=0x7ffcf9f5de20,n =0xcf1010

after : &m=0x7ffcf9f5de48,&n=0x7ffcf9f5de40,n=0xcf1010

結論:

1.呼叫a函式是把n的值(並非是n指向的內容,而是指標的值)在函式內開闢空間複製下來。

2.a函式中的n和main中的儲存n的記憶體位址是不一樣的,但是都是儲存了n的值(n是指標)。

3.a函式任何傳遞非指標、非引用的引數,都會在a函式的函式棧內開闢空間複製這個值,如果是陣列,都會複製該陣列在該函式,一旦退出該函式,針對a函式對m的操作都會實現,因為a函式內的m是對a函式引數m的複製,並非原始資料。

--------------------------------c------------------------------------

/*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

***> file name: test.c

> author: perrynzhou

> mail: [email protected]

> created time: sat 24 sep 2016 02:21:00 am hkt

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*******/

#include

#include

void a(int m,int *n)

int main(void)

return 0;

}

執行結果:

$ ./a.out

before : &m=0x7ffe1e7f3058,&n=0x7ffe1e7f3050,n=0x6a3010

call a: &m =0x7ffe1e7f303c,&n=0x7ffe1e7f3030,n =0x6a3010

after : &m=0x7ffe1e7f3058,&n=0x7ffe1e7f3050,n=0x6a3010

最終結論:

***和golang中是一致的哦!!結論和golang中是一致的哦!!!***

1.呼叫a函式是把n的值(並非是n指向的內容,而是指標的值)在函式內開闢空間複製下來。

2.a函式中的n和main中的儲存n的記憶體位址是不一樣的,但是都是儲存了n的值(n是指標)。

3.a函式任何傳遞非指標、非引用的引數,都會在a函式的函式棧內開闢空間複製這個值,如果是陣列,都會複製該陣列在該函式,一旦退出該函式,針對a函式對m的操作都會實現,因為a函式內的m是對a函式引數m的複製,並非原始資料。

python傳遞指標 python值傳遞和指標傳遞

a 1 def change integer a a a 1 return a print change integer a print a b 1,2,3 def change list b b 0 b 0 1 return b print change list b print b 第乙個例子,...

c中形參修改值問題(指標傳遞和值傳遞)

首先,寫 的時候,寫出類似如下的 最後出現了段錯誤 define size 10 void encryptupdata int ctx intmain 寫出這樣的 主要是對函式引數傳遞的本質沒有很深的了解。最關鍵的一點就是,永遠要記住,形參是乙個副本傳遞,若要修改形參的值那麼請用一級指標,若要修改形...

關於 指標的引用和指標值傳遞

1,形參是實參的拷貝 值一樣,儲存位址不一樣 包括指標變數,指標變數 int p a p只是儲存位址的變數。請欣賞第一段 回答輸出結果 18分 include includeusing namespace std void try change int p int b 7 p b cout p 說是...