2017-05-16 10 views
-1

그래서 나는 새롭고 일반적으로 프로그래밍에 익숙하지 않으므로 어리석은 질문을 묻기 위해 다시 downvoted하지 않기를 바란다. 프로젝트 오일러 문제와 문제 25 "1000 자리 피보나치 수"를 통해 내 방식대로 작업 중입니다. 이상한 행동으로 보이는 항목이 있습니다. 다음은이 동작을 초래 한 코드입니다. 실수로 나는 다음과 같은 변화를 만들어 2의 힘을 생성하는 깔끔한 방법을 발견하고이 올바른 결과를 생성 한 나는 내가 가진 것을 발견 이유를 결정하는 과정에서, 그래서골란 : 괴상한 큰 Int 동작

package main 

import (
    "fmt" 
    "math/big" 
) 

func main() { 
    index := 2 
    l := new(big.Int) 
    pl := big.NewInt(1) 
    i := big.NewInt(1) 
    for { 
     l = i 
     i.Add(i, pl) 
     pl = l 
     index++ 
     if len(i.String()) == 1000 { 
      break 
     } 
    } 
    fmt.Println(i, "\nindex: ", index) 
} 

는 당연히이 정답을 생성하지 않았다 .

package main 

import (
    "fmt" 
    "math/big" 
) 

func main() { 
    index := 2 
    l := new(big.Int) 
    pl := big.NewInt(1) 
    i := big.NewInt(1) 
    for { 
     l.Set(i) 
     i.Add(i, pl) 
     pl.Set(l) 
     index++ 
     if len(i.String()) == 1000 { 
      break 
     } 
    } 
    fmt.Println(i, "\nindex: ", index) 
} 

내 질문은 각 큰 Int 인 변수 i 값으로 설정하고,이 큰를 할당하는 올바른 방법 아니었다면 왜 이런 오류가 발생하지 않은 원인이 첫 번째 예에서 일어나는 것입니다 int var 값? i = l, 등등은이 상황에서 단순히 부정확 한 합법적 인 큰 Int 연산입니까?

답변

7

의 선

l = i 

pl = l 

는 그들이 무슨 생각을하고 있지 않습니다.

l, pli은 포인터이며 서로 할당하면 big.Int 값이 아닌 포인터 값이 복사됩니다.

l = i 실행 후, l 동일한 big.Int 가리키는 현재 i 같은 포인터 값이다. l.Set(i)을 사용하면 값이 i 값인 big.Int 값으로 설정되지만 l 및값은 여전히 ​​두 개의 개별 값을 가리 킵니다.

+0

감사합니다. 그건 완벽하게 이해가됩니다. –