Go-指针类型详解(空指针、指针的指针、函数形参指针等)

简介: Go-指针类型详解(空指针、指针的指针、函数形参指针等)

简介

  • 取地址符是&
  • 指针保存的是地址,地址里的数据才是真正的值,使用*来获取值

nt系列、float系列、boo;、string、数组、结构体struct都有指针,一般在栈

指针、切片、管道、接口、Map是引用类型,一般在堆,GC回收

声明

空指针

Go中的空指针是nil

var ptr *int

零值指针

func new(Type) *Type

内建函数new分配内存。其第一个实参为类型,而非值。其返回值为指向该类型的新分配的零值的指针

ptr1 := new(int)

声明并初始化

1. i := 10
2. ptr2 := &i

ptr2存的是i的地址

指针的指针

  pptr := & ptr2

pptr存的是ptr2的地址

内存

以前面的指针和指针的指针为例

2020062310470442.png

内存结果见后序截图

函数传递指针

1. func plus(p *int) {
2.  (*p)++
3. }
plus(ptr2)

全部代码

package main
import "fmt"
func plus(p *int) {
  (*p)++
}
func main() {
  //------------声明指针------------
  //---空指针---
  var ptr *int
  //---零值指针---
  ptr1 := new(int)
  fmt.Println("ptr ptr1 *ptr1,:",ptr,ptr1,*ptr1)
  //-----------声明并初始化----------
  i := 10
  ptr2 := &i
  fmt.Printf("i的地址&i:%v,i的值:%v,ptr2的地址&ptr2:%v,ptr2的值:%v,ptr2指向的值:%v\n",&i,i,&ptr2,ptr2,*ptr2)
  //-------------指针的指针----------
  pptr := & ptr2
  fmt.Printf("pptr的地址&pptr:%v,pptr的值pptr:%v,pptr指向的值*pptr:%v,ptr2的地址&ptr2:%v,ptr2的值:%v,ptr2指向的值:%v\n",&pptr,pptr,*pptr,&ptr2,ptr2,*ptr2)
  //-------------函数形参指针--------
  plus(ptr2)
  fmt.Println(i)
}

结果截图

2020062310470442.png

更多Go相关内容:Go-Golang学习总结笔记

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。


相关文章
|
10月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
453 2
|
11月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
315 4
|
人工智能 Dart Go
Go语言中的make和new函数的区别及使用场景
本文详细解析了Go语言中`make`和`new`函数的使用方法及区别。`make`用于创建切片、映射和通道等引用类型,返回初始化后的值;`new`用于创建任意类型的零值对象,返回指向该对象的指针。文章通过多个示例说明两者的应用场景,并总结了面试中可能遇到的相关问题,如底层实现、使用场景及优缺点等,帮助读者更好地理解和区分这两个函数。
412 1
|
Go Python
函数的定义与调用 -《Go语言实战指南》
本文介绍了 Go 语言中函数的核心特性与用法,包括基本定义格式、调用方式、多返回值、返回值命名、参数类型简写、可变参数、高阶函数及匿名函数等内容。通过示例代码详细展示了如何定义和使用不同类型的函数,使读者能够全面了解 Go 函数的灵活性与强大功能。
314 12
|
Go 调度
GO语言函数的内部运行机制分析
以上就是Go语言中函数的内部运行机制的概述,展示了函数在Go语言编程中如何发挥作用,以及Go如何使用简洁高效的设计,使得代码更简单,更有逻辑性,更易于理解和维护。尽管这些内容深入了一些底层的概念,但我希望通过这种方式,将这些理论知识更生动、更形象地带给你,让你在理解的同时找到编程的乐趣。
264 5
|
存储 C语言
指针的函数传参的详细讲解(一)
本文介绍了计算机内存管理与C语言中指针的基本概念及应用。从内存单元的划分到指针的定义,解释了指针作为地址的作用及其数据类型特性。文章通过代码示例详细说明了一级指针、二级指针的使用方法,以及`void*`指针的特点和限制。此外,还探讨了指针运算规则、函数指针传参解引用的原理,并结合链表实例分析了一级与二级指针在实际场景中的区别。最后附带两道指针练习题,帮助读者巩固理解。
301 0
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
465 4
|
JSON 安全 网络协议
go语言使用内置函数和标准库
【10月更文挑战第18天】
310 3
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
2134 13
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
971 4

热门文章

最新文章