[Go]指针操作
指针类型比较常见
type Dog struct {
name string
} func (dog *Dog) SetName (name string){
dog.name = name
}
对于基本类型Dog来说,*Dog就是它的指针类型。&dog就是d值不为nil的dog变量的指针值。如果一个方法的接收者是*Dog类型,那么该方法就是基本类型Dog的一个指针方法,在这种情况下,方法接收者实际上就是当前基本值的指针值,可以他通过指针值访问到基本值包含的任何字段以及调用与之关联的任何方法。
传统意义上来说,指针式指向某个确切的内存地址的值。Go语言中还有其他几样东西可以代表指针,其中最贴近传统意义的是uintptr类型。unsafe.Pointer可以表示任何指向可寻址的值的指针。同时也是前面提到的指针值和uintptr值之间的桥梁,通过它可以在这两种值之上进行双向的转换
1、前面有个关键词,可寻址,那哪些值是不可寻址的呢?
1)不可变的值会被存储到一个确切的内存区域
如:常量、基本类型字面量、字符串值、基于字符串的索引或切片的结果值
2)临时结果,可以把各种对值字面量施加的表达式的求值结果都看作是临时结果
如:算术操作的结果值,针对值字面量的表达式的结果值、类型转换表达式结果值,类型断言表达式结果值、对函数或方法的调用结果值
有一例外:对切片字面量的索引结果值可寻址
如果把临时结果赋给一个变量,那么它就是可寻址的了。
3)不安全的,破坏程序一致性
如:字典变量的索引结果值的取址操,获取由字面量或标识符代表的函数或方法的地址
2、不可寻址的值在使用上有哪些限制?
首先是无法使用取址操作符&获取它们的指针
func New (name string ) Dog {
return Dog{name}
} New("little pig").SetName("monster")
上面的代码可以执行成功吗?
对一个Dog类型的变量dog来说,调用表达式dog.SetName("monster")会被自动转译为(&dog).SetName("monster"),即:先取dog的指针值,再在该指针值上调用SetName方法。但是New函数所得的结果值属于临时结果,是不可寻址的,因此会报错。
Go语言中++或--的左边表达式的结果值必须是可寻址的。
[Go]指针操作的更多相关文章
- C#指针操作Marshal实例
static void Main(string[] args) { ,,,}; ,,,}; IntPtr pt = Marshal.AllocHGlobal(a.Length); //从source数 ...
- C语言指针操作
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/pointer-manipulation. ...
- Day4:T1小技巧(类似于指针操作)T2搜索+小细节
Day4:其中有很多小技巧get T1 一直没有听到过像这样的小技巧的略专业名词,有点类似于指针操作,之前有碰到过很多这样的题目 每次都是以不同的形式出现,但是感觉思想还是有点接近的吧(就比如某天有一 ...
- C语言数组操作和指针操作谁更高效
在上一篇博文 代码优化小技巧(持续更新......) 第三条关于数组和指针谁更高效, 意犹未尽, 决定单独拉出一篇来讲 1. 数组和指针操作对比 #include <stdio.h> i ...
- C# 指针操作相关
C# 指针操作相关 ========================================= // ** 取int 地址 以指针访问指向值 ** // ...
- 在c#中用指针操作图片像素点
在Bitmap类中有两个函数SetPixel,GetPixel,分别用来设置或读取图片中指定点的颜色(这里发现了VS的一个错误,SetPixel的文档说明写的是“获取颜色”??). 当要对一幅图进行相 ...
- VB指针操作和消息钩子
二.VB怎么用指针 要想弄明白VB怎么使用指针,就必须要弄明白两件事,第一,如何取得数组的指针,第二,如何将指针所指向的数组取出来. A.在讲解这两个问题之前,我们需要了解几个 ...
- 陕西师范大学第七届程序设计竞赛网络同步赛 I 排队排队排队【数组任一位可以移动到队头,最少移动几次增序/数组指针操作】
链接:https://www.nowcoder.com/acm/contest/121/I来源:牛客网 题目描述 ACM竞赛队内要开运动会啦!!!! 竞赛队内的一群阳光乐观积极的队员们迅速的在操场上站 ...
- 06深入理解C指针之---指针操作和比较
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针作为一种特殊类型的变量,必须遵守C语言中变量先声明后使用的原则.本节内容中指针的操 ...
- QTGraphics-View拖拽以及鼠标指针操作
因为QGraphicsView继承自QWidget,它也提供了像QWidget那样的拖拽功能. 另外,为了方便,Graphics View框架也为场景以及每个item提供拖拽支持.当视图接收到拖拽事件 ...
随机推荐
- 【转载】(0, eval)(‘this’)
var window = this || (0, eval)('this') 在avalon源码中有这么一行代码,var window = this很容易理解 这里复习一下Global Object: ...
- Backbone学习记录(3)
创建视图 同前面创建模型和集合的方式一样,Backbone.View.extend()即可创建视图 var UserView=Backbone.View.extend(); var view1=new ...
- JVM 内存机制理解【转自http://www.cnblogs.com/dingyingsi/p/3760447.html】
我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等 ...
- 数位dp知识
转自http://blog.csdn.net/zhaoxinfan/article/details/8707605 下面先给出数位DP的背景: •在给定区间[A,B]内,找满足要求的数. •要求一般和 ...
- 【C#】枚举
枚举 public static class CommonEnums { public enum people { /// <summary> ///男人 /// </summary ...
- 关于c#的结构体struct与class的区别
C# 结构体 struct C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员. 结构和类的区别: 1.结构是值类型,它在栈中分配空间:而类是引用类型,它在堆中 ...
- 基于Java实现的冒泡排序算法
冒泡排序是一种简单基础的排序算法,相信在大学课堂里老师已经讲过了,现在我基于Java来实现一遍. 简述 冒泡排序正如其关键词一样,杂乱的气泡经过浮动,最后大的气泡飘到了上面而小的气泡在下面,无序的元素 ...
- Ajax深入理解
Ajax Asynchronous JavaScript and XML 异步的JavaScript和XML ajax通过与后台服务器进行少量的数据交换,ajax可以使页面实现异步更新,即不需要重新 ...
- HTML的历史与历史遗留问题
1. <style type="text/css"> 从前,HTML的设计者认为以后应该还会有其他样式,不过如今我们已经醒悟,事实表明,完全可以只使用<style ...
- Excel数据导入SQL Server
基本有2种方案,都是无需安装Office的方案 Ole DB读取 + BulkCopy 获取Excel各个SheetName //连接串 string strConn = "Provider ...