2010-03-05 3 views
4

15 행이 유효하지 않은 이유에 대해 혼란 스럽습니다. 왜 포인터를 큰 수 없습니다. int에 대한 포인터 수있는 반면, 역 참조 될 수 있습니까?Go에서 포인터를 역 참조

package main 

import (
    "fmt" 
    "big" 
) 

func main() { 
    var c *int = getPtr() 
    fmt.Println(c) 
    fmt.Println(*c) 

    var d *big.Int = big.NewInt(int64(0)) 
    fmt.Println(d) 

    // does not compile - implicit assignment of big.Int 
    // field 'neg' in function argument 
    //fmt.Println(*d) 
} 

func getPtr() *int { 
    var a int = 0 
    var b *int = &a 
    return b 
}
+0

출력 0x110480 (c 주소) 0 (C 값) 0 (d.String 결과() I 가정)이고 – Dijkstra

답변

5

Int는 구조체이므로 안보이는 필드가 있습니다. 값으로 구조체를 함수에 전달할 때 함수의 복사본을 만들고 있습니다. Go spec이 법적으로 대한

은 ... 하나 T의 모든 분야가 보낸해야하며, 할당이 에서 T 선언 인에 같은 패키지해야한다고. 즉, struct 구조체의 구조체의 모든 필드에 구조체의 모든 필드를 법적으로 할당 할 수있는 경우에만 값을 구조체 에 할당 할 수 있습니다.