Golang 배열 배열 사용 참고 사항 및 세부 정보

go 배열에서 길이는 [3]int *[3]int 데이터 유형의 일부입니다. 

 

배열 사용에 대한 참고 사항 및 세부 정보


1) 배열은 동일한 유형의 여러 데이터의 조합으로, 배열이 선언/정의되면 그 길이는 고정되어 동적으로 변경할 수 없습니다.

var a [3]int
a[0] =1.1   这样是不行的,必须是整数

2) var arr [ ]int 그러면 arr은 슬라이스입니다( []에 크기가 적혀 있지 않으면 이것이 슬라이스입니다 ) .

3) 배열의 요소는 값 유형 및 참조 유형을 포함하여 모든 데이터 유형이 될 수 있지만 혼합될 수는 없습니다.

	var b = [10]*int{&i, &j, &k}
	fmt.Println(len(b))
	fmt.Println(*b[0], *b[1], *b[2])

0xc0000a60f8 0xc0000a6100 0xc0000a6108

4) 배열 생성 후 값을 지정하지 않으면 기본값이 있음 숫자형 배열 : 기본값은 0 문자열 배열 : 기본값은 "" Bool 배열 : 기본값은 false (in) 사실 배열을 정의할 때 이미 공간이 할당되어 있으니 할당하지 않고 그냥 기본값을 사용하세요)

5) 배열 사용 단계: 1. 배열을 선언하고 공간을 엽니다. 2. 배열의 각 요소에 값을 할당합니다. (값을 할당하지 않으면 기본 0 값을 사용한다는 의미입니다. ) 3. 배열을 사용합니다.

6) 배열의 첨자는 0부터 시작합니다.

7) 배열 첨자는 지정된 범위 내에서 사용해야 합니다. 그렇지 않으면 패닉이 보고됩니다. 배열이 범위를 벗어났습니다(예: var arr [5]int). 유효한 첨자는 0-4입니다.

8) Go의 배열은 값형이므로 기본적으로 값으로 전달되기 때문에 값 복사가 이루어지며 배열은 서로 영향을 주지 않습니다.

func Test(t [5]int) {
	fmt.Printf("%p\n", &t)
}

	c := [5]int{1, 2, 3, 4, 5}
	fmt.Printf("%p\n", &c)
	Test(c)

0xc00012a030
0xc00012a060

참고: [3]int는 데이터 유형이고 length도 데이터 유형입니다. [3]int [4]int는 동일한 데이터 유형이 아닙니다. 

 9) 원본 배열을 다른 함수에서 수정하고 싶다면 참조전이(포인터 방식)을 이용하면 된다. [먼저 체험해보고 다이어그램을 그려보자]

func Test(t *[5]int) {
	fmt.Printf("%p \n", t)
	fmt.Println((*t)[0], (*t)[1], (*t)[2], (*t)[3], (*t)[4])
	(*t)[0] = 100
}

func main() {
	c := [5]int{1, 2, 3, 4, 5}
	fmt.Printf("%p \n", &c)
	Test(&c)
	fmt.Println(c)
}


0xc00000e4e0
0xc00000e4e0 
1 2 3 4 5    
[100 2 3 4 5]

a *[3]int a는 [3]int 유형의 배열에 대한 포인터를 나타냅니다.

 

하나는 값 복사이고 다른 하나는 포인터입니다. 데이터가 매우 큰 경우 값 복사는 리소스를 많이 소모합니다.

배열을 사용할 때 외부 배열만 변경하려면 효율적이고 빠른 포인터 전송을 사용하십시오.

첫 번째는 컴파일에 실패합니다: 배열이 전달되면 길이가 유형의 일부가 됩니다. 여기서는 배열이 슬라이싱되고 컴파일이 실패합니다.

두 번째 오류: 길이가 데이터 유형의 일부입니다. 길이가 다릅니다. [3]int가 [4]int 유형과 다릅니다.

세번째가 맞네요

추천

출처blog.csdn.net/qq_34556414/article/details/132839028