首页 > 其他分享 >指针(译)

指针(译)

时间:2022-11-10 12:35:26浏览次数:43  
标签:xPtr int zero func new 指针


『就要学习 Go 语言』系列 -- 第 28 篇分享好文

当我们调用一个带有参数的函数是,参数是原值的拷贝:

func zero(x int) {
x = 0
}
func main() {
x := 5
zero(x)
fmt.Println(x) // x is still 5
}

上面这段代码中,zero() 函数不会改变主函数中 x 的原值。但如果我们想要这样做呢?一种实现办法是使用一种称为指针的特殊数据类型。

func zero(xPtr *int) {
*xPtr = 0
}
func main() {
x := 5
zero(&x)
fmt.Println(x) // x is 0
}

指针指向的是内存中 值的存储地址,而不是值本身。通过使用指针 *int, zero() 函数能够修改原始变量。

The * and & operators

在 Go 中,指针由 * 字符和存储值的类型表示。在 zero() 函数中,xPtr 是指向 int 类型的指针。

​*​​​也用于指针变量的解引用,这使得我们可以访问指针指向的值。当我们写 *xPtr = 0 时,我们在说“将整形 0 存储在 xPtr 指向的内存位置”。如果我们尝试执行 xPtr = 0,将会得到一个编译器错误,因为 xPtr 不是一个 int 型变量,而是​​*int​​​型,它只能被赋予一个​​*int​​型的值。

最后,我们可以使用 & 操作符获取变量的地址。&x 返回的值是 *int 型,因为 x 是 int 类型。这允许我们修改原始变量。main() 函数中的 &x 和 zero() 函数中的 xPtr 指的是相同的内存位置。

new

另外一个获取指针的方法是使用内置函数 new():

func one(xPtr *int) {
*xPtr = 1
}
func main() {
xPtr := new(int)
one(xPtr)
fmt.Println(*xPtr) // x is 1
}

new() 接受以类型作为参数,分配足够的内存来满足该类型的值,并返回指向该内存的指针。

在一些编程语言中,new() 和 & 之间有很大的区别,需要非常小心的是,最终使用完,需要删除使用 new() 创建的任何内容。Go 却不是这样,它是具有垃圾回收的编程语言,这意味着当变量不再使用时,内存会自动回收。

如果我的文章对你有所帮助,点赞、转发都是一种支持!



指针(译)_操作符


指针(译)_操作符_02

标签:xPtr,int,zero,func,new,指针
From: https://blog.51cto.com/u_15289640/5840479

相关文章

  • 每日一题-双指针
    判断子序列intj=0,i=0; while(i<mandj<n){if(b[i]==a[j]){j++;}i++;}cout<<(j==n?"Yes":"No");description......
  • C++面经:C++多态-----虚函数、虚函数表、虚函数指针、虚继承
    1.虚函数引入类中之后,类会发生什么变化?首先我们创建一个空类A,然后创建一个类的对象a,并打印它的占用空间大小---为1   我们再往类中添加两个成员函数后,再返回对象......
  • 指针
    空指针:空指针指向的内存编号为0;用于初始化指针变量(指针变量必须先初始化再使用(*p的操作))空指针指向的内存空间是不可以被访问的(不可以进行*p的操作)(内存空间为0~255是不可......
  • 函数指针和函数指针类型
    函数指针1.     定义每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。注意:函数指针的本质是一个指针变量,且指针指向的函数......
  • 用指针比较三个数大小(从小到大)
    #include<stdio.h>intswap(int*p1,int*p2){ inttemp; temp=*p1; *p1=*p2; *p2=temp; return0;}intmain(){ inta; intb; intc; int*pa; int*pb;......
  • 双指针_Leetcode刷题_11/100
    算法解释双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。若两个指针指向同一个数组,遍历的方向相同且不会相交,则也称......
  • C语言指针运算
    指针运算指针可以加减运算,但不可以乘除运算。在指针中p++并不是加一,而是以素的值为单位加一,指向下一个单位,加多少字节 要看类型是什么。在指针变量名字前面加*比......
  • 指针
    什么是指针C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节都有唯一的内存地址。CPU通过内存寻址对存储在内存中的某个指定数据对象的地址进行......
  • 实验四 类与数组、指针
    任务五代码:vectorInt:#pragmaonce#include<iostream>#include<cassert>usingnamespacestd;classVectorInt{public:VectorInt(ints);......
  • 指针
    数据存放于内存地址中,而指针指的就是内存地址。变量的指针:存放变量数据的内存地址。指针变量:存放某一数据的地址的变量。指针变量的定义:数据类型*变量名;eg:int*amq;指针......