go基础语法-指针
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基础语法-指针的更多相关文章
- C语言基础语法之指向函数的指针
		指针是C语言的精髓,对于初学者来讲,指针是C语言语法学习中比较难的知识点,而这里面指向函数的指针更是不太容易理解. 下面给大家讲下怎样学习理解C语言中指向函数的指针及编程方法和使用例子. 注意:这是一 ... 
- Objective-C基础语法快速入门
		Objective-C基础语法快速入门 2010-11-04 16:32 折酷吧 zheku8 字号:T | T 假如我们对面向对象的思维已经C语言都很熟悉的话,对于我们学习Objective-C将会 ... 
- Python学习的个人笔记(基础语法)
		Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ... 
- Swift基础语法(常量变量、数据类型、元组、可选、断言)
		本文来自Swift中文开发组,感谢翻译者的分享. 本文将分几部分对Swift对ios的语法做讲解.本文为第一节,主要讲解基础语法. 常量和变量 常量和变量把一个名字(比如maximumNumberOf ... 
- java(二、基础语法和基本数据类型)
		Java 基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一 ... 
- python基础语法及知识点总结
		本文转载于星过无痕的博客http://www.cnblogs.com/linxiangpeng/p/6403991.html 在此表达对原创作者的感激之情,多谢星过无痕的分享!谢谢! Python学习 ... 
- JavaScript快速入门-ECMAScript基础语法
		一.JavaScript引入方式 1.行内式 <script> alert(123); </script> 2.外链式 <script src='custom.js'&g ... 
- Gradle Groovy 基础语法 MD
		Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ... 
- C语言基础语法
		#include <stdio.h> int main() { int age; printf("input your age"); scanf("%d&qu ... 
随机推荐
- C可变参数
			https://www.cnblogs.com/pengdonglin137/p/3345911.html#_label0 
- 数据库建模工具 PD的使用
			1.1. 数据库建模工具 PD的使用 安装12.5版本,进行破解 PD 是最专业数据建模工具, 是 Sybase 公司一个 产品 PD 提供四种模型文件 PDM 物理数据模型,面向数据库表结构设计,直 ... 
- vsphere的P2V工具做的物理机迁移到虚拟机报错out of memory
			vsphere的P2V工具做的物理机迁移到虚拟机 迁移成功,但是启动报错 进入rescue模式后发现是sysctl.conf文件的参数设大了因为虚拟机的内存没有物理机内存大 kernel.shm ... 
- docker中自定ingress网络
			在某些时候,docker自动生成的ingress网络会与服务器上已经存在的网络产生冲突,这个时候,你需要自定义ingress. 在自定义前,你需要删除所有有端口发布的服务. 使用命令docker ne ... 
- Java使用iText生成word文件的完美解决方案(亲测可行)
			JAVA生成WORD文件的方法目前有以下种: 一种是jacob 但是局限于windows平台 往往许多JAVA程序运行于其他操作系统 在此不讨论该方案 一种是pio但是他的excel处理很程序 wor ... 
- Perl中的字符串操作函数
			1.$position = index(string,substring,skipchars): 该函数返回子串substring在字符串string中的位置,如果不存在,则返回-1:参数skipch ... 
- php中文正则匹配
			今天接到一个需求,用户昵称系统需要将昵称输入的字符类型限定为 中文,英文,数字, -,_ 显然这个应该用正则来实现,那么最终的规则是怎么样的呢?示例代码如下: <?php $str = '我爱北 ... 
- AutoComplete的使用方法
			百度 酷狗,反正使用搜索功能时,都会看到类似于图一这种自动补全的功能,灰常的方便,今天做一个项目,刚好要加这个功能,于是一通百度之后,总算做出来,源代码在文章末尾会提供下载.还有,我这个是参考了网上的 ... 
- OC中对象的description方法
			周所周知,我们在做项目时, 可以在类的.m文件中重写该类的对象的描述description方法: 示例: -(NSString *)description{ NSString *str = [N ... 
- get-pip.py 安装
			http://www.pip-installer.org/en/latest/installing.html$ curl http://pypi.python.org/packages/source/ ... 
