首页 > 其他分享 >指针

指针

时间:2023-02-08 20:58:38浏览次数:32  
标签:变量 make 地址 new fmt 指针

go语言中不存在指针操作,只需记住两个符号

  • &: 取地址
  • *: 根据地址取值

简单的指针应用

package main

import "fmt"

func main() {
  a := 18
  //根据值取指针
  fmt.Println(&a) //返回的数是个16进制数
  //根据指针取值
  p := &a
  fmt.Println(*p)
  //查看指针数据是什么类型的
  fmt.Printf("%T", p) //*int类型的,*开头都是指针类型变量
}

总结:

取地址操作符&和取值操作符*是一对互补操作符,&取出地址,*根据地址取出地址指向的值。

变量,指针地址,指针变量,取地址,取值的相互关系和特征如下:

  • 对变量进行取地址(&)操作,可以获得这个变量的指针变量。
  • 指针变量的值是指针地址
  • 对指针变量进行取值(*)操作,可以获得指针变量指向的原变量的值

new

给一个变量声明一个 赋予一个内存空间

package main

import "fmt"

func main() {
  var a1 *int //这个默认是nil空值是不能被赋值的
  fmt.Println(a1)
  var a2 = new(int) //这个相当于申请了一个内存地址可以进行赋值
  *a2 = 1000
  fmt.Println(a2)
  fmt.Println(*a2) //这里发现打印的a2值为1000
}

make

make也是用于内存分配的,区别于new,它只用于slice(切片),map以及chan的内存创建,而且它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型,所以就没必要返回他们的指针了。

make函数的函数签名如下

func make(t Type, size ...IntegerType) Type

make函数是无可替代的,我们在使用slice,map以及channel的时候,都需要使用make进行初始化,然后才可以对它们进行操作。

make和new的区别

1.make 和new都是用来申请内存的

2.new很少用,一般都是用来给数据类型申请内存,string]、int 返回的是对应类型的指针

3.make是用来给slice、map、chan申请内存的,make函数返回的是对应的这三个类型本身

标签:变量,make,地址,new,fmt,指针
From: https://www.cnblogs.com/suknna/p/17103243.html

相关文章

  • C语言填空 :利用指针 三个数按从小到排序
    #include<stdio.h>//将任意三个整数按从小到大排序voidswap(【1】,【2】){inttemp;temp=*pa;*pa=*pb;*pb=temp;}main(){inta,b,c,t......
  • 一些c语言题和数组指针
    自学C语言第一题:念数字重点的几个步骤:如何分离一个数intmask=1; intt=a;//为了不改变a的大小,因为a还要参与后续的运算 while(t>9){ t/=10; mask*=10;}/......
  • 【经典算法】双指针(尺取法):爱,是双向奔赴,还是你追我赶?
    一、前言双指针法又称尺取法,顾名思义,在区间操作时,使用两个指针同时遍历区间,从而实现高效操作。两个指针,就像是一男一女,他们遍历区间的过程,又何尝不像是一对男女彼此追求爱......
  • CF #727(div2)D. PriceFixed, 贪心,双指针
    problemD.PriceFixedtimelimitpertest1secondmemorylimitpertest256megabytesinputstandardinputoutputstandardoutputLenaisthemosteconomicalgirli......
  • C++中的共享指针以及循环引用
    C++中shared_ptr对象之间可以共享对象的拥有权,但是这种共享的对象引用在某些情况下可能会引发一些问题。例如,循环引用会造成两个对象之间相互引用,无法删除对象。一个循环......
  • C++ Day14 借助智能指针实现文本查询查询
    一、设计思路数据结构:1、读取文件时,要记住文件的每一行,并且要将每一行分解为独立的单词vector<string>vec;istringstream2、输出时提供每个单词与其关联的行号,且......
  • 三数之和|排序以去重,双指针结合二分思想
    给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0。请你返回所有......
  • 深入探究nil和野指针
    nil是一个指针对象为空,指针对象存储的是地址。下面黑乎乎带代码是拷贝过来别人的易于理解。并且还可作为一个反例,解释下给野指针发送消息是否崩溃的情况。1.nil>De......
  • 4.3简单的指针
    指针也是一种变量,它所表示的不是数据的值,而是存储着数据的内存的地址。通过使用指针,就可以对任意指定地址的数据进行读写。虽然前面所提到的假想内存IC中仅有10位地址信号,......
  • 用指针实现数组的打印以及地址
    中间是我拿来比较的,看看是否输出一样//指针与数组的打印和地址intmain(){intarr[]={1,2,3,4,5,6,7,8,9,0};int*p=arr;intsz=sizeof(arr)/sizeof(arr[0]);......