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部分

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

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

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

/*
不能改变指针本身
调用testPointer1后,b的值不会变
*/
var b = new(int)
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))
}

原文地址:https://www.cnblogs.com/lz120792/p/9581223.html

时间: 2024-10-17 15:52:56

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

嵌入式linux C++语言(二)——C++对C语言基础语法的扩展

嵌入式linux C++语言(二)--C++对C语言基础语法的扩展 C++是基于C语言扩展发展而来的面向对象的程序设计语言,本文将主要讨论C++语言基于C语言扩展的方面. 一.类型增强 1.类型检查更严格 在C语言中: const int a = 100; int *p = &a; 在C++语言中: const int a = 100;//必须在定义的时候初始化 const int *p = &a; 在C++语言中不能隐式转换数据类型. error: invalid conversion

JAVA基础篇一(Java,C++基础语法的比较)

从大学开始学习C语言,到后来学习C++.java.c#,编程语言逐渐从面向过程到面向对象,但面向对象的语言特性基本相似,基础语法差别并不是很大,在这里总结大家对于C++和JAVA两种语言的语法特性,记录下来作参考. 1.内存的分配 (1)C++的内存分配方式: 栈区:一般是int a这样直接分配空间的变量的内存都是分配在栈区,栈区内存不需要显式释放. 堆区:一般是利用指针分配的内存,需要用delete语句释放. 全局区(静态区):全局变量和静态变量的存储是放在一块的,程序结束后由系统释放. 常量

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

Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅,一开始保存在word上,代码不是很好看,于是决定复制到博客里面,可能有复制过程中出错的,或者我本身在理解方面有出错的地方,希望能得到指正,谢谢  后续的内容我会继续学习…… python下载地址  www.python.org Python 分为2.7和3.3两个版本,3.3有些库不兼容,因此用2.

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

Swift 是 iOS 和 OS X 应用开发的一门新语言.然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的. Swift 的类型是在 C 和 Objective-C 的基础上提出的,Int是整型:Double和Float是浮点型:Bool是布尔型:String是字符串.Swift 还有两个有用的集合类型,Array和Dictionary,请参考集合类型. 就像 C 语言一样,Swift 使用变量来进行存储并通过变量名来关联值.在 Sw

Swift学习(1基础语法)

Swift     基础语法 基本 1.取消了预处理命令 2.取消了指针的概念 3.取消了NS前缀 4.大量将类替换成struct 5.";" 在同一行用来分割语句,如果不是同一行可以省略 6.可选项 7.playground 8.条件语句"if",空执行"()" 9.没有非0即真的逻辑 10.switch  (1)可以针对任意类型的值进行分支,不在局限在整数 (2)且一般不需要break. (3)可以用","分割可选值 (4

Objective-C基础语法快速入门

Objective-C基础语法快速入门 2010-11-04 16:32 折酷吧 zheku8 字号:T | T 假如我们对面向对象的思维已经C语言都很熟悉的话,对于我们学习Objective-C将会非常有用.假如我们对C语言还不熟悉的话,那我们需要学习一下C语言. AD: 2010年11月编程语言排行榜和2月编程语言排行榜讲的都是Objective-C.Objective-C是Mac软件开发领域最主要的开发语言,假如我们对面向对象的思维已经C语言都很熟悉的话,对于我们学习Objective-C

ios学习路线_OC基础语法

OC是面向对象的语言,同java,python等等一样. OC中的变量类命名同其他对象语言基本类似,写法遵循驼峰法则 一般命名用到的是下划线,字母,开头字符非数字,网上很多有说也可以$符号,其实命名中基本不会用到这个 OC里面的关键字也不多,如图: OC中分基本数据类型和指针类型(即指对象类型) 那么一些基本类型的范围值和写法,这里不一一说,网上太多了,随便百度下 下面废话也不多说,直接给个网上的ppt说明吧 其实写过面向对象语言的朋友,基本上这块so easy 这里可以下载oc的基础部分 io

JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)

Java基础语法(变量.常量.数据类型.运算符与数据类型转换) 1.变量 Java中,用户可以通过指定数据类型和标识符来声明变量,其基本语法为: DataType identifier; 或 DataType identifier = value; 其中,DataType是变量类型,如int/string/char/double/boolean等:identifier是变量名称,即标识符:value就是声明变量的值. 注: a.标识符由数字0-9.大小写字母.下划线.美元符号.人民币符号以及所有

黑马程序员---------《基础语法》笔记

mac ox 基础介绍 1.常用的Unix指令 ls-l 列出当前路径的所有文件cd 目录转换pwd 显示当前路径mkdir 新建目录touch 创建文件open 打开文件\文件夹who 显示当前用户名clear 清屏按下Tab键,可以自动补齐指令名称.文件名.文件夹名等 2.Mac的基本操作 DOCK:桌面下方的快捷应用 DOCK的设置:可以根据自己喜好设置DOCK的风格 3.常用快捷键: 拷贝:cmd+c粘贴:cmd+v回退:cmd+z保存: cmd+s关闭窗口:cmd+w退出程序:cmd+