3.7 Go指针
1. Go指针
每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。
Go 语言中使用&作符放在变量前面对变量进行“取地址”操作。
1.指针默认值nil
2.通过&(取地值符)取变量地址
3.通过*(取值符)透过指针访问目标值
格式:
age := 18
ptr:=&age //age是变量名,&age是取age的内存地址,地址交给ptr变量接收,ptr类型是*int
首先基本数据类型中,如name="yugo" ,变量name存的值是yugo
1)基本数据类型,变量存的是值,称为值类型
2)通过&符号获取变量的地址,例如&name
3)指针类型的变量,存的是另一个变量的内存地址,这个地址指向的空间存的是值
4)获取指针类型指向的值,使用*,例如*ptr,使用*ptr获取ptr指向的值
package main import (
"fmt"
) func main() {
var name string = "yugo"
//查看name变量的内存地址,通过&name取地址
fmt.Printf("name的内存地址:%v\n", &name) //指针变量,存的是内存地址
//ptr指针变量指向变量name的内存地址
var ptr *string = &name
fmt.Printf("指针变量ptr的内存地址:%v\n", ptr) //获取指针变量的值,用*ptr
//*ptr表示读取指针指向变量的值
fmt.Printf("指针变量ptr指向的值是:%v\n", *ptr)
}
5)值类型(int、float、bool、string、array、struct)都有对应指针类型
比如
*int和*string等等
6)使用指针类型交换变量的值
//想要交换ab的值
func exchange(a, b *int) {
*a, *b = *b, *a
} func main() {
a, b := 3, 4
exchange(&a, &b)
fmt.Println(a, b)
}
7)使用new()函数创建指针
func main() {
s1 := new(string) //new函数返回指针类型*string,用s1指针变量存储
fmt.Printf("s1类型:%T s1指针变量存储的内存地址是:%v\n", s1, s1) //s1类型*string,值是空字符串的内存地址
//s1="哈哈" 错误写法,s1存储的内存地址
*s1 = "马云说我不爱钱" //*s1取内存地址指向的值
fmt.Println(*s1)
}
3.7 Go指针的更多相关文章
- TODO:Golang指针使用注意事项
TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...
- enote笔记法使用范例(2)——指针(1)智能指针
要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...
- C++虚函数和函数指针一起使用
C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...
- C++11 shared_ptr 智能指针 的使用,避免内存泄露
多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...
- c 数组与指针的使用注意事项
数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这 ...
- Marshal.Copy将指针拷贝给数组
lpStatuss是一个UNITSTATUS*的指针类型实例,并包含SensorDust字段 //定义一个数组类型 byte[] SensorDust = new byte[30] //将指针类型拷贝 ...
- C++智能指针
引用计数技术及智能指针的简单实现 基础对象类 class Point { public: Point(int xVal = 0, int yVal = 0) : x(xVal), y(yVal) { ...
- EC笔记:第三部分:17、使用独立的语句将newed对象放入智能指针
一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include <iostream> using namespace std; int func1(){ //返回 ...
- 智能指针shared_ptr的用法
为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer). 智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈 ...
- 智能指针unique_ptr的用法
unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: std::unique_pt ...
随机推荐
- Linux查看端口或pid使用路径
1. lsof -i:10010 查看10010端口的占用情况 命令返回结果: 2. netstat -lpn | grep 80 查看80端口服务端socket占用状况 3. ll /proc/26 ...
- eclipse自动补全导致变量会跟上String后缀的问题解决
https://blog.csdn.net/feinifi/article/details/103665860
- HDU 1402 A*B
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define ms(s,a) memset(s,a ...
- Linux指令面试题01-进程查看与终止
查看某一进程是否运行:ps -ef|grep 程序名 终止程序: kill pid 转载于:https://www.cnblogs.com/feihujiushiwo/p/10896636.html
- nodeJS中express框架设置全局跨域请求头
//设置跨域请求头 router.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin&qu ...
- 关于 cmd 命令运行时发现错误(已加 classpath): 找不到或无法加载主类 xxx.class 原因: Java .lang.ClassNotFoundException: xxx.class
我的是这个代码,出现了,无法加载主类的问题,查看了一些回答,有的是说要删除包名(我的没有带包,所以不是这个问题),还有的是说classpath的配置有问题,但是我的java ,javac测试jdk的时 ...
- zwx_helper
通过重载c++operator,实现一种轻松的wxWidgets界面编程风格,如html编写页面一样直观容易. 举一例,一个界面页有四块区,如果是开发html的话,是从头到脚一气书写 <div ...
- python(索引/切片)
一.索引 1.索引值从左到右-->从0开始,索引值从右到左-->从-1开始 取值格式var[index] >>> name = "xinfangshuo&quo ...
- linux 服务器/客户端 tcp通信的简单例子
昨天弄了sublime之后没有弄输入中文的了,学生党来着,刚好可以练练英语(英语渣渣,还要考六级),所以注释都写英文的(语法什么的就别太深究了) 服务器端: /*start from the very ...
- Android中限制输入框最大输入长度
通常情况下只需要在布局文件中加入maxlength这一属性即可 <EditText android:inputType="text" android:singleLine=& ...