a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Golang > 正文

Go語言中函數的參數傳遞與調用的基本方法

2020-04-01 19:12:27
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Go語言中函數的參數傳遞與調用的基本方法,是golang入門學習中的基礎知識,需要的朋友可以參考下
 

按值傳遞函數參數,是拷貝參數的實際值到函數的形式參數的方法調用。在這種情況下,參數在函數內變化對參數不會有影響。

默認情況下,Go編程語言使用調用通過值的方法來傳遞參數。在一般情況下,這意味著,在函數內碼不能改變用來調用所述函數的參數。考慮函數swap()的定義如下。

復制代碼代碼如下:

/* function definition to swap the values */
func swap(int x, int y) int {
   var temp int

 

   temp = x /* save the value of x */
   x = y    /* put y into x */
   y = temp /* put temp into y */

   return temp;
}


現在,讓我們通過使實際值作為在以下示例調用函數swap():
復制代碼代碼如下:

 package main

 

import "fmt"

func main() {
   /* local variable definition */
   var a int = 100
   var b int = 200

   fmt.Printf("Before swap, value of a : %d/n", a )
   fmt.Printf("Before swap, value of b : %d/n", b )

   /* calling a function to swap the values */
   swap(a, b)

   fmt.Printf("After swap, value of a : %d/n", a )
   fmt.Printf("After swap, value of b : %d/n", b )
}
func swap(x, y int) int {
   var temp int

   temp = x /* save the value of x */
   x = y    /* put y into x */
   y = temp /* put temp into y */

   return temp;
}


讓我們把上面的代碼放在一個C文件,編譯并執行它,它會產生以下結果:
  1. Before swap, value of a :100 
  2. Before swap, value of b :200 
  3. After swap, value of a :100 
  4. After swap, value of b :200 
 

這表明,參數值沒有被改變,雖然它們已經在函數內部改變。

通過傳遞函數參數,即是拷貝參數的地址到形式參數的參考方法調用。在函數內部,地址是訪問調用中使用的實際參數。這意味著,對參數的更改會影響傳遞的參數。

要通過引用傳遞的值,參數的指針被傳遞給函數就像任何其他的值。所以,相應的,需要聲明函數的參數為指針類型如下面的函數swap(),它的交換兩個整型變量的值指向它的參數。

復制代碼代碼如下:

/* function definition to swap the values */
func swap(x *int, y *int) {
   var temp int
   temp = *x    /* save the value at address x */
   *x = *y      /* put y into x */
   *y = temp    /* put temp into y */
}

現在,讓我們調用函數swap()通過引用作為在下面的示例中傳遞數值:
復制代碼代碼如下:

package main

 

import "fmt"

func main() {
   /* local variable definition */
   var a int = 100
   var b int= 200

   fmt.Printf("Before swap, value of a : %d/n", a )
   fmt.Printf("Before swap, value of b : %d/n", b )

   /* calling a function to swap the values.
   * &a indicates pointer to a ie. address of variable a and 
   * &b indicates pointer to b ie. address of variable b.
   */
   swap(&a, &b)

   fmt.Printf("After swap, value of a : %d/n", a )
   fmt.Printf("After swap, value of b : %d/n", b )
}

func swap(x *int, y *int) {
   var temp int
   temp = *x    /* save the value at address x */
   *x = *y    /* put y into x */
   *y = temp    /* put temp into y */
}


讓我們把上面的代碼放在一個C文件,編譯并執行它,它會產生以下結果:
  1. Before swap, value of a :100 
  2. Before swap, value of b :200 
  3. After swap, value of a :200 
  4. After swap, value of b :100 
 

這表明變化的功能以及不同于通過值調用的外部體現的改變不能反映函數之外。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 一级毛片免费网站 | 亚洲视频在线看 | 欧美精品在线一区二区三区 | 国产 高清 在线 | 亚洲jizzjizz日本少妇 | 国产成人99久久亚洲综合精品 | 久久精品亚洲精品国产欧美kt∨ | www.黄网 | 亚洲国产伊人 | 青草青草视频2免费观看 | 日韩欧美一区二区在线观看 | 91久久精品国产91久久 | 久久久精品一区二区 | 一本一道久久a久久精品蜜桃 | 国产成人免费视频网站视频社区 | 成人欧美一区二区三区黑人孕妇 | 亚洲视频1区 | 久久久久国产精品免费免费搜索 | 91精品国产综合久久婷婷香蕉 | 国产中文在线 | 亚洲免费网站 | 日韩在线观看 | 欧美一区永久视频免费观看 | 欧美片网站免费 | 福利片在线 | 亚洲电影一区 | 午夜影院男女 | 国产精品第一国产精品 | 久久久国产精品 | 国产一区二区三区精品在线 | 亚洲精品视频在线看 | 天堂在线一区二区 | 毛片a片 | 有码在线 | 色综合久久88色综合天天6 | 99久久99热这里只有精品 | 国产欧美日韩中文字幕 | 久久一级| 一区二区三区在线播放 | 国产精品久久久99 | 性视频一区二区 |