이동-포인터
Go의 포인터는 쉽고 재미있게 배울 수 있습니다. 일부 Go 프로그래밍 작업은 포인터를 사용하여 더 쉽게 수행되며 참조에 의한 호출과 같은 다른 작업은 포인터를 사용하지 않고 수행 할 수 없습니다. 그래서 완벽한 Go 프로그래머가되기 위해서는 포인터를 배워야합니다.
아시다시피 모든 변수는 메모리 위치이며 모든 메모리 위치에는 메모리의 주소를 나타내는 앰퍼샌드 (&) 연산자를 사용하여 액세스 할 수있는 주소가 정의되어 있습니다. 정의 된 변수의 주소를 인쇄 할 다음 예제를 고려하십시오.
package main
import "fmt"
func main() {
var a int = 10
fmt.Printf("Address of a variable: %x\n", &a )
}
위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.
Address of a variable: 10328000
그래서 당신은 메모리 주소가 무엇이며 어떻게 액세스하는지 이해했습니다. 이제 포인터가 무엇인지 살펴 보겠습니다.
포인터 란?
ㅏ pointer다른 변수의 주소, 즉 메모리 위치의 직접 주소 인 변수입니다. 다른 변수 나 상수와 마찬가지로 포인터를 사용하여 변수 주소를 저장하려면 먼저 포인터를 선언해야합니다. 포인터 변수 선언의 일반적인 형식은 다음과 같습니다.
var var_name *var-type
여기, type포인터의 기본 유형입니다. 유효한 C 데이터 유형이어야하며var-name포인터 변수의 이름입니다. 포인터를 선언하는 데 사용한 별표 *는 곱하기에 사용하는 것과 동일한 별표입니다. 그러나이 명령문에서 별표는 변수를 포인터로 지정하는 데 사용됩니다. 다음은 유효한 포인터 선언입니다-
var ip *int /* pointer to an integer */
var fp *float32 /* pointer to a float */
정수, 부동 또는 기타 모든 포인터 값의 실제 데이터 유형은 메모리 주소를 나타내는 긴 16 진 숫자와 동일합니다. 데이터 유형이 다른 포인터 간의 유일한 차이점은 포인터가 가리키는 변수 또는 상수의 데이터 유형입니다.
포인터를 사용하는 방법?
포인터로 자주 수행하는 몇 가지 중요한 작업이 있습니다. (a) 포인터 변수를 정의하고, (b) 변수의 주소를 포인터에 할당하고, (c) 포인터 변수에 저장된 주소의 값에 액세스 .
이러한 모든 연산은 피연산자가 지정한 주소에있는 변수의 값을 반환하는 단항 연산자 *를 사용하여 수행됩니다. 다음 예제는 이러한 작업을 수행하는 방법을 보여줍니다-
package main
import "fmt"
func main() {
var a int = 20 /* actual variable declaration */
var ip *int /* pointer variable declaration */
ip = &a /* store address of a in pointer variable*/
fmt.Printf("Address of a variable: %x\n", &a )
/* address stored in pointer variable */
fmt.Printf("Address stored in ip variable: %x\n", ip )
/* access the value using the pointer */
fmt.Printf("Value of *ip variable: %d\n", *ip )
}
위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.
Address of var variable: 10328000
Address stored in ip variable: 10328000
Value of *ip variable: 20
Go의 Nil 포인터
Go 컴파일러는 할당 할 정확한 주소가없는 경우 포인터 변수에 Nil 값을 할당합니다. 이것은 변수 선언시 수행됩니다. nil이 할당 된 포인터는nil 바늘.
nil 포인터는 여러 표준 라이브러리에 정의 된 값이 0 인 상수입니다. 다음 프로그램을 고려하십시오-
package main
import "fmt"
func main() {
var ptr *int
fmt.Printf("The value of ptr is : %x\n", ptr )
}
위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.
The value of ptr is 0
대부분의 운영 체제에서는 해당 메모리가 운영 체제에 의해 예약되어 있기 때문에 프로그램이 주소 0의 메모리에 액세스 할 수 없습니다. 그러나 메모리 주소 0은 특별한 의미가 있습니다. 포인터가 액세스 가능한 메모리 위치를 가리 키도록 의도되지 않았 음을 나타냅니다. 그러나 관례 적으로 포인터에 nil (영) 값이 포함되어 있으면 아무 것도 가리키는 것으로 간주되지 않습니다.
nil 포인터를 확인하려면 다음과 같이 if 문을 사용할 수 있습니다.
if(ptr != nil) /* succeeds if p is not nil */
if(ptr == nil) /* succeeds if p is null */
자세한 Go 포인터
포인터는 많지만 쉬운 개념을 가지고 있으며 Go 프로그래밍에 매우 중요합니다. 다음 포인터 개념은 Go 프로그래머에게 명확해야합니다.
Sr. 아니요 | 개념 및 설명 |
---|---|
1 | Go-포인터 배열 여러 포인터를 보유하도록 배열을 정의 할 수 있습니다. |
2 | 이동-포인터에 대한 포인터 Go를 사용하면 포인터에 포인터를 놓을 수 있습니다. |
삼 | Go에서 함수에 대한 포인터 전달 참조 또는 주소로 인수를 전달하면 호출 된 함수에서 전달 된 인수를 호출 함수에서 변경할 수 있습니다. |