Golang中如何比较指针?解析和示例

2021年3月29日16:57:50 发表评论 2,015 次浏览

在Go编程语言或Golang中, 指针是一个变量, 用于存储另一个变量的内存地址。 Golang中的指针也称为特殊变量。变量用于在系统中的特定内存地址存储一些数据。始终以十六进制格式找到内存地址(以0x开头, 如0xFFAAF等)。

在Go语言中,你可以比较两个指针。只有当两个指针指向内存中的相同值或为nil时,它们的值才相等。你可以使用Go语言提供的==和!=操作符来对指针进行比较:

1. ==运算符:如果两个指针都指向同一变量, 则此运算符返回true。或如果两个指针都指向不同的变量, 则返回false。

语法如下:

pointer_1 == pointer_2

例子:

// Go program to illustrate the
// concept of comparing two pointers
package main
  
import "fmt"
  
func main() {
  
     val1 := 2345
     val2 := 567
  
     // Creating and initializing pointers
     var p1 * int
     p1 = &val1
     p2 := &val2
     p3 := &val1
  
     // Comparing pointers 
     // with each other
     // Using == operator
     res1 := &p1 == &p2
     fmt.Println( "Is p1 pointer is equal to p2 pointer: " , res1)
  
     res2 := p1 == p2
     fmt.Println( "Is p1 pointer is equal to p2 pointer: " , res2)
  
     res3 := p1 == p3
     fmt.Println( "Is p1 pointer is equal to p3 pointer: " , res3)
  
     res4 := p2 == p3
     fmt.Println( "Is p2 pointer is equal to p3 pointer: " , res4)
  
     res5 := &p3 == &p1
     fmt.Println( "Is p3 pointer is equal to p1 pointer: " , res5)
}

输出如下:

Is p1 pointer is equal to p2 pointer:  false
Is p1 pointer is equal to p2 pointer:  false
Is p1 pointer is equal to p3 pointer:  true
Is p2 pointer is equal to p3 pointer:  false
Is p3 pointer is equal to p1 pointer:  false

2.!=运算符:如果两个指针都指向同一变量, 则此运算符返回false。或如果两个指针都指向不同的变量, 则返回true。

语法如下:

pointer_1 != pointer_2

例子:

// Go program to illustrate the 
// concept of comparing two pointers
package main
  
import "fmt"
  
func main() {
  
     val1 := 2345
     val2 := 567
  
     // Creating and initializing pointers
     var p1 * int
     p1 = &val1
     p2 := &val2
     p3 := &val1
  
     // Comparing pointers
     // with each other
     // Using != operator
     res1 := &p1 != &p2
     fmt.Println( "Is p1 pointer not equal to p2 pointer: " , res1)
  
     res2 := p1 != p2
     fmt.Println( "Is p1 pointer not equal to p2 pointer: " , res2)
  
     res3 := p1 != p3
     fmt.Println( "Is p1 pointer not equal to p3 pointer: " , res3)
  
     res4 := p2 != p3
     fmt.Println( "Is p2 pointer not equal to p3 pointer: " , res4)
  
     res5 := &p3 != &p1
     fmt.Println( "Is p3 pointer not equal to p1 pointer: " , res5)
}

输出如下:

Is p1 pointer not equal to p2 pointer:  true
Is p1 pointer not equal to p2 pointer:  true
Is p1 pointer not equal to p3 pointer:  false
Is p2 pointer not equal to p3 pointer:  true
Is p3 pointer not equal to p1 pointer:  true

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: