1.基础定义

golang的指针没有cpp等语言的指针复杂,具体表现在其不可用于运算、只有值传递

语法:var variableName *int = memoryAddr

var a = 2
var p *int = &a
p = p + 1 //编译器会报错:invalid operation : ...

2.指针类型转换

golang中不同类型的指针间不能相互转换,例:*int、*int32、*int64

m1,m2,m3 := int(1),int32(1),int64(1)
p := &m1
p32 := &m2
p64 := &m3
//下面的强制类型转换编译器会报错,使用某些IDE编码时会直接提示类型转换错误
p = (*int)(p32)
p = (*int)(p64)
p32 = (*int32)(p)
p32 = (*int32)(p64)
p64 = (*int64)(p)
p64 = (*int64)(p32)

3.只有值传递?

golang的函数调用中没有引用传递的说法,只有值传递!在一些书籍或网上博客中讲解golang指针和函数调用时存在错误。具体规范参见The Go Programming Language Specification中的Calls部分

传指针可以实现类似传引用的效果,传指针可以改变指针指向的地址

/*
改变指针指向的地址
调用func testPointer后,a的值变为2
*/
var a int = 1
testPointer(&a)
func testPointer(p *int){
*p = 2
}

只有值传递,指针本身的值是不能改变的

/*
不能改变指针本身
调用func testPointer1后,b的值不会变
*/
var b = new(int)
testPointer1(b)
func testPointer1(p *int) {
p = nil
}

测试代码

package main
import "fmt"
/*
改变指针指向的地址
*/
func testPointer(p *int) {
*p =2
}
/*
不能改变指针本身
*/
func testPointer1(p *int) {
p = nil
}
/*
交换变量值
*/
func swapValue1(a,b *int) {
*a,*b = *b,*a
}
func swapValue(a,b int)(int ,int) {
return b,a
}
func main() {
var a = 0
b := new(int)
testPointer(&a)
fmt.Println(a)
fmt.Println(b)
testPointer1(b)
fmt.Println(b)
m,n := 1,2
swapValue1(&m,&n)
fmt.Println(m,n)
fmt.Println(swapValue(m,n))
}

go基础语法-指针的更多相关文章

  1. C语言基础语法之指向函数的指针

    指针是C语言的精髓,对于初学者来讲,指针是C语言语法学习中比较难的知识点,而这里面指向函数的指针更是不太容易理解. 下面给大家讲下怎样学习理解C语言中指向函数的指针及编程方法和使用例子. 注意:这是一 ...

  2. Objective-C基础语法快速入门

    Objective-C基础语法快速入门 2010-11-04 16:32 折酷吧 zheku8 字号:T | T 假如我们对面向对象的思维已经C语言都很熟悉的话,对于我们学习Objective-C将会 ...

  3. Python学习的个人笔记(基础语法)

    Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...

  4. Swift基础语法(常量变量、数据类型、元组、可选、断言)

    本文来自Swift中文开发组,感谢翻译者的分享. 本文将分几部分对Swift对ios的语法做讲解.本文为第一节,主要讲解基础语法. 常量和变量 常量和变量把一个名字(比如maximumNumberOf ...

  5. java(二、基础语法和基本数据类型)

    Java 基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一 ...

  6. python基础语法及知识点总结

    本文转载于星过无痕的博客http://www.cnblogs.com/linxiangpeng/p/6403991.html 在此表达对原创作者的感激之情,多谢星过无痕的分享!谢谢! Python学习 ...

  7. JavaScript快速入门-ECMAScript基础语法

    一.JavaScript引入方式 1.行内式 <script> alert(123); </script> 2.外链式 <script src='custom.js'&g ...

  8. Gradle Groovy 基础语法 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. C语言基础语法

    #include <stdio.h> int main() { int age; printf("input your age"); scanf("%d&qu ...

随机推荐

  1. C可变参数

    https://www.cnblogs.com/pengdonglin137/p/3345911.html#_label0

  2. 数据库建模工具 PD的使用

    1.1. 数据库建模工具 PD的使用 安装12.5版本,进行破解 PD 是最专业数据建模工具, 是 Sybase 公司一个 产品 PD 提供四种模型文件 PDM 物理数据模型,面向数据库表结构设计,直 ...

  3. vsphere的P2V工具做的物理机迁移到虚拟机报错out of memory

     vsphere的P2V工具做的物理机迁移到虚拟机  迁移成功,但是启动报错  进入rescue模式后发现是sysctl.conf文件的参数设大了因为虚拟机的内存没有物理机内存大 kernel.shm ...

  4. docker中自定ingress网络

    在某些时候,docker自动生成的ingress网络会与服务器上已经存在的网络产生冲突,这个时候,你需要自定义ingress. 在自定义前,你需要删除所有有端口发布的服务. 使用命令docker ne ...

  5. Java使用iText生成word文件的完美解决方案(亲测可行)

    JAVA生成WORD文件的方法目前有以下种: 一种是jacob 但是局限于windows平台 往往许多JAVA程序运行于其他操作系统 在此不讨论该方案 一种是pio但是他的excel处理很程序 wor ...

  6. Perl中的字符串操作函数

    1.$position = index(string,substring,skipchars): 该函数返回子串substring在字符串string中的位置,如果不存在,则返回-1:参数skipch ...

  7. php中文正则匹配

    今天接到一个需求,用户昵称系统需要将昵称输入的字符类型限定为 中文,英文,数字, -,_ 显然这个应该用正则来实现,那么最终的规则是怎么样的呢?示例代码如下: <?php $str = '我爱北 ...

  8. AutoComplete的使用方法

    百度 酷狗,反正使用搜索功能时,都会看到类似于图一这种自动补全的功能,灰常的方便,今天做一个项目,刚好要加这个功能,于是一通百度之后,总算做出来,源代码在文章末尾会提供下载.还有,我这个是参考了网上的 ...

  9. OC中对象的description方法

    周所周知,我们在做项目时, 可以在类的.m文件中重写该类的对象的描述description方法: 示例: -(NSString *)description{    NSString *str = [N ...

  10. get-pip.py 安装

    http://www.pip-installer.org/en/latest/installing.html$ curl http://pypi.python.org/packages/source/ ...