>  기사  >  백엔드 개발  >  golang은 포인터 포인팅을 변경합니다.

golang은 포인터 포인팅을 변경합니다.

WBOY
WBOY원래의
2023-05-14 16:54:37723검색

Golang은 효율적이고 확장 가능하며 배우기 쉬운 오픈 소스 프로그래밍 언어로, 네트워크 애플리케이션, 분산 시스템, 클라우드 컴퓨팅, 인공 지능 및 기타 분야에서 널리 사용됩니다.

Golang에서 포인터는 변수의 주소를 메모리에 저장하는 데 사용되는 매우 일반적인 데이터 유형으로, 프로그램이 변수의 값에 직접 액세스하고 수정할 수 있습니다. Golang의 포인터는 & 연산자를 통해 변수의 주소를 얻을 수 있고, * 연산자를 사용하여 변수의 값에 간접적으로 액세스할 수 있습니다.

그러나 어떤 경우에는 프로그램이 실행되는 동안 한 변수의 주소를 다른 변수의 주소로 가리키는 포인터를 변경해야 할 수도 있습니다. 이는 일반적으로 동적으로 할당된 메모리 또는 데이터 구조 작업과 관련된 프로그램에서 발생합니다. 이번 글에서는 Golang에서 포인터 포인팅을 변경하는 방법을 살펴보겠습니다.

포인터 할당

먼저 포인터를 사용하여 변수 값을 변경하는 방법을 보여주는 간단한 예를 살펴보겠습니다.

package main
  
import "fmt"
  
func main() {
    var a int = 10        // 声明一个变量a,并初始化为10
    var p *int           // 声明一个整型指针p
  
    p = &a               // 将指针p指向变量a的地址
    *p = 20              // 通过指针p,修改a的值为20
  
    fmt.Println("a = ", a) // 输出a的值,结果为20
}

위 코드에서는 정수 변수 a를 선언하고 10으로 초기화했습니다. 동시에 정수를 가리키는 포인터 p가 선언되고 & 연산자를 통해 변수 a의 주소를 가리킵니다. 다음으로 *p를 사용하여 포인터 p가 가리키는 변수의 값을 가져오고 이를 20으로 수정하여 변수 a의 값을 변경합니다.

포인터 리디렉션

위의 예에서는 포인터 p를 통해 변수 a의 값을 수정했지만 포인터 p 자체의 포인터는 변경하지 않았습니다. 이제 다른 변수의 주소를 가리키도록 포인터를 리디렉션하는 방법을 살펴보겠습니다.

package main
  
import "fmt"
  
func main() {
    var a int = 10        // 声明一个变量a,并初始化为10
    var b int = 20        // 声明一个变量b,并初始化为20
    var p *int           // 声明一个整型指针p
  
    p = &a               // 将指针p指向变量a的地址
    p = &b               // 将指针p重定向为变量b的地址
  
    fmt.Println("a = ", a) // 输出a的值,结果为10
    fmt.Println("b = ", b) // 输出b的值,结果为20
    fmt.Println("*p = ", *p) // 输出*p所指向变量的值,结果为20
}

위 코드에서는 두 개의 정수 변수 a와 b를 선언하고 각각 10과 20으로 초기화했습니다. 동시에 정수를 가리키는 포인터 p가 선언됩니다. 다음으로 &p를 사용하여 포인터 p를 변수 a의 주소로 지정한 다음 이를 변수 b의 주소로 리디렉션합니다.

a와 b의 값을 출력해 보면 그 값이 변하지 않은 것을 알 수 있고, *p를 통해 변수 b의 값인 20에 접근할 수 있습니다.

포인터 교환

포인터 교환이란 변수 값을 교환하는 목적을 달성하기 위해 두 포인터가 가리키는 변수의 주소를 교환하는 것을 말합니다. 이 섹션에서는 포인터 교환을 구현하는 두 가지 방법을 소개합니다.

방법 1: 임시 변수를 통한 교환

package main
  
import "fmt"
  
func swap(a, b *int) {
    var temp int        // 定义一个临时变量temp
    temp = *a
    *a = *b
    *b = temp
}
  
func main() {
    var a int = 10        // 声明一个变量a,并初始化为10
    var b int = 20        // 声明一个变量b,并初始化为20
    var p1 *int = &a      // 声明一个指向变量a的指针p1
    var p2 *int = &b      // 声明一个指向变量b的指针p2
  
    swap(p1, p2)          // 交换指针p1和p2所指向变量的值
  
    fmt.Println("a = ", a) // 输出a的值,结果为20
    fmt.Println("b = ", b) // 输出b的值,结果为10
}

위 코드에서는 int 유형에 대한 두 개의 포인터를 허용하는 교환 함수를 정의합니다. 이 함수에서는 포인터 중 하나가 가리키는 변수의 값을 저장하기 위해 임시 변수 temp를 정의합니다. 그런 다음 포인터를 통해 변수의 값을 교환하고 최종적으로 포인터 교환을 구현합니다.

방법 2: 포인터 간 교환

package main
  
import "fmt"
  
func swap(a **int, b **int) {
    var temp *int         
    temp = *a
    *a = *b
    *b = temp
}
  
func main() {
    var a int = 10        // 声明一个变量a,并初始化为10
    var b int = 20        // 声明一个变量b,并初始化为20
    var p1 *int = &a      // 声明一个指向变量a的指针p1
    var p2 *int = &b      // 声明一个指向变量b的指针p2
  
    swap(&p1, &p2)        // 交换指针p1和p2的指向
  
    fmt.Println("a = ", a) // 输出a的值,结果为20
    fmt.Println("b = ", b) // 输出b的值,结果为10
}

위 코드에서 포인터에 대한 두 개의 포인터를 허용하도록 교환 함수의 서명을 수정했습니다. 이런 식으로 스왑 함수에서 우리는 이 두 포인터의 포인팅을 교환할 수 있으며 이를 통해 포인터 교환을 실현할 수 있습니다.

요약

이 글에서는 주로 Golang에서 가리키는 포인터를 바꾸는 방법을 소개합니다. 본 글의 설명을 통해 포인터를 사용하여 변수의 값을 변경하는 방법, 포인터 포인터를 리디렉션하는 방법, 포인터가 가리키는 변수의 값을 교환하는 방법을 이해할 수 있습니다.

포인터를 잘못 사용하면 프로그램 충돌이나 데이터 손상이 발생할 수 있으므로 포인터를 사용할 때는 매우 주의해야 합니다. 그러므로 우리는 코드를 주의 깊게 읽고 포인터를 항상 주의해서 사용해야 합니다.

위 내용은 golang은 포인터 포인팅을 변경합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.