Post

10. 배열

10. 배열

✅ 1. 배열 선언

  • 원소의 개수, 원소 타입으로 선언하며 별도의 초기값을 지정하지 않는 경우 타입 기본값으로 초기화된다
    1
    2
    
      var nums [5]int // [0, 0, 0, 0, 0]
      var temps [3]float64 = [3]float64{24.3, 11.1} // [24.3, 11.1, 0.0]
    
  • 인덱스를 정하여 원소를 초기화할 수 있다 go var s = [5]int{1:10, 3:30} // [0, 10, 0 ,30, 0]

  • ...를 사용해 배열 요소 개수를 생략할 수 있으며, 이 때 배열 요소 개수는 초기화되는 요소 개수와 같다
    1
    
      x := [...]{10, 20, 30}
    

    💡 배열 길이는 반드시 상수로 선언해야 한다 ` not-constant array bound x`

✅ 2. 배열 요소 접근

1
2
3
4
nums[2] = 300
for i := 0; i < len(nums); i++ {
	fmt.Println(nums[i])
}
  • 대괄호 인덱스를 통해 요소에 접근한다
  • len() 함수는 배열 길이를 반환한다

2.1 range 순회

1
2
3
4
5
6
7
8
for i, v := range arr {
	fmt.Println(v) // declared and not used: icompiler[UnusedVar]
}

for _, v := range arr {
	fmt.Println(v)
}

  • for 문에서 range키워드를 이용하여 인덱스와 배열 요소를 순회할 수 있다
  • 사용하지 않는 변수는 _로 무효화해야 한다

✅ 3. 배열은 연속된 메모리

1
2
3
4
5
6
arr := [...]int{4, 2, 3}

fmt.Printf("%p\n", &arr)        // 0x140000140f0
fmt.Printf("%p\n", &arr[0])     // 0x140000140f0

// 요소 위치 = 배열 시작 주소 + (인덱스 X 타입 크기)
  • 배열 a는 메모리 공간의 연속된 위치에 요소들을 저장하며 컴퓨터는 인덱스와 타입 크기를 사용해서 메모리 주소를 찾는다

3.1 배열 복사

1
2
3
4
5
6
7
8
9
arr := [...]int{4, 2, 3}
brr := [3]int{100, 100, 100}

fmt.Printf("arr = %p\n", &arr) // arr = 0x14000116018
fmt.Printf("brr = %p\n", &brr) // brr = 0x14000116030

brr = arr

fmt.Printf("brr = %p\n", &brr) // brr = 0x14000116030
  • Go언에에서 대입 연산자는 우변의 값을 좌변의 메모리 공간에 복사한다. 이 때 복사되는 크기는 타입 크기와 같다.

✅ 4. 다중배열

1
2
3
4
5
6
var b = [2][5]int{
	{1, 2, 3, 4, 5},
	{1, 2, 3, 4, 5}, // 쉼표 찍어야 함
}

var a = [2][2]int{\{1, 2\}, {3, 4}}
  • 다중 배열 초기화 시 중괄호가 마지막 요소와 같은 줄에 있지 않은 경우 쉼표를 찍어야 한다
This post is licensed under CC BY 4.0 by the author.