[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提供拖拽支持.当视图接收到拖拽事件 ...
随机推荐
- nginx中常见的变量
$arg_PARAMETER 客户端GET请求PARAMETER的值. $args 请求中的参数. $binary_remote_addr 二进制码形式的客户端地址. $body ...
- 文件共享服务 FTP,NFS 和 Samba
DAS DAS 指 Direct Attached Storage,即直连附加存储,这种设备直接连接到计算机主板总线上,计算机将其识别为一个块设备,例如常见的硬盘,U 盘等,这种设备很难做到共享. N ...
- lock和synchronized的同步区别与选择
1. lock是一个接口,而synchronized是java的一个关键字,synchronized是内置的语言实现:(具体实现上的区别在<Java虚拟机>中有讲解底层的CAS不同,以前有 ...
- String的用法——构造方法
package cn.itcast_01; /* 字符串:就是多个字符组成的一串数据,也可以看成一个字符数组 *通过API,我们得知: A: 字符串字面值,如abc,也可以看做一个对象 B:字符串是常 ...
- 高阶函数之filter 和 sorted
filter函数 接受一个函数和序列,把传入的函数依次作用于每个序列,然后根据返回值时True还是False保留或舍弃元素. def func(n): if n%2 == 0: return n m ...
- 作用域链、this细说
一.作用域链 作用域:浏览器给js的一个生存环境(栈内存) 作用域链:js中的关键字var和function 都可以提前声明和定义,提前声明和定义的放在我们的内存地址(堆内存)中.然后js从上到下逐行 ...
- jQuery中面向对象思想实现盒子内容切换
这里主要是模拟小米官网中的首页的内容模块实现的主要动态效果 布局:采用了bootstrap框架进行布局,及其其中的字体图标 html: <!-- 内容 --> <div class= ...
- Java replaceAll不区分大小写
Java 中replaceAll如何忽略大小写呢? 方式一:在正则表达式前面添加(?i) @Test public void test_replaceAll33(){ String input = & ...
- innerHTML的性能问题
看到一遍文章When innerHTML isn’t Fast Enough,反应了innerHTML在操作量大了以后的性能下降的问题. 并且给出了一个replaceHTML的函数 function ...
- JS通过使用PDFJS实现基于文件流的预览功能
需求: 使用JS实现PDF文件预览功能 备选方案: 使用ViewerJS,官网 http://viewerjs.org/ 使用PDFJS,官网 https://mozilla.github.io/ ...