1、數組是多個 相同類型 的數據的組合,一個數組一旦聲明/定義了,其 長度是固定的,不能動態變化 。
創新互聯是一家專注于成都做網站、成都網站制作和成都西云數據中心的網絡公司,有著豐富的建站經驗和案例。
2、var arr []int? ? 這時arr就是一個slice 切片 。
3、數組中的元素可以是任何數據類型,包括值類型和引用類型,但是 不能混用 。
4、數組創建后,如果沒有賦值,有默認值如下:
? ? 數值類型數組:????默認值為 0
? ? 字符串數組:? ? ? ?默認值為 ""
? ? bool數組:? ? ? ? ? ?默認值為 false
5、使用數組的步驟:
? ? (1)聲明數組并開辟空間
? ? (3)給數組各個元素賦值
? ? (3)使用數組
6、數組的下標是從0開始的。
7、數組下標必須在指定范圍內使用,否則報panic:數組越界,比如var arr [5]int的有效下標為0~4.
8、Go的數組屬于 值類型 ,在默認情況下是 值傳遞 ,因此會進行值拷貝。 數組間不會相互影響。
9、如想在其他函數中去修改原來的數組,可以使用 引用傳遞 (指針方式)。
10、長度是數組類型的一部分,在傳遞函數參數時,需要考慮數組的長度,看以下案例:
題1:編譯錯誤,因為不能把[3]int類型傳遞給[]int類型,前者是數組,后者是切片;
題2:編譯錯誤,因為不能把[3]int類型傳遞給[4]int類型;
題3:編譯正確,因為[3]int類型傳給[3]int類型合法。
package main
import "fmt"
var arr [2]int //申明一個數組
func main() {
arr[0] = 1 //數組賦值
fmt.Println(arr)
arrtest := [3]int{1, 2, 3} //數組的另一種申明方式
fmt.Println(arrtest)
a := [...]int{1, 2} //[...]自動識別數組的長度
fmt.Println(a)
fmt.Println(len(a))//輸出數組的長度
}
下邊是slice的申明和使用其實這就是一種動態的數組
復制代碼 代碼如下:
package main
import "fmt"
func main() {
d := []int{1, 2, 3} //申明一個slice這個是動態的數組,沒有長度
fmt.Println(d)
var q, w []int
q = d[0:1] //可以定取得上邊的長度
w = d[1:3]
d = append(d, 2) //向其中添加元素
fmt.Println(d)
fmt.Println(q, w)
}
數組是一個由 固定長度 的 特定類型元素 組成的序列,一個數組可以由零個或多個元素組成。 數組是值類型
數組的每個元素都可以通過索引下標來訪問,索引下標的范圍是從0開始到數組長度減1的位置,內置函數 len() 可以返回數組中元素的個數。
2.類型的打印,結果的第二種打印方式
3.對元素的修改或者賦值
4.判斷數組是否相等:長度、類型
4.數組的地址:連續存儲的空間
5.數組的賦值、地址、取值
6.數組的默認值
7.數組的初始化
8.數組的逆置
9.求數組的最大值、最小值、平均值
10.對數組字符串進行連接
11.冒泡排序法的實現
12.數組做函數的參數
13.二維數組:賦值和地址
14.二維數組:打印和輸出
15. 指針數組,每一個元素都是地址
17.數組的內存分配
按值傳遞函數參數,是拷貝參數的實際值到函數的形式參數的方法調用。在這種情況下,參數在函數內變化對參數不會有影響。
默認情況下,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文件,編譯并執行它,它會產生以下結果:
Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :100
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文件,編譯并執行它,它會產生以下結果:
Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :200
After swap, value of b :100
這表明變化的功能以及不同于通過值調用的外部體現的改變不能反映函數之外。
當前名稱:go語言數組帶參數 go語言數組定義
網站路徑:http://m.kartarina.com/article34/hgjepe.html
成都網站建設公司_創新互聯,為您提供定制開發、網站內鏈、網站排名、微信公眾號、建站公司、品牌網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯