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 ...
随机推荐
- 解决Oracle在命令行下无法使用del等键问题
前言: Oracle使用Linux命令行进行编辑? 有PL/SQL development,SQL development等工具,为何用Linux命令行? 但也免不了有用的的时候 以下是解决在Linu ...
- 2019-2020-1 20199328《Linux内核原理与分析》第十一周作业
预备实验部分 2019/11/27 10:17:34 下载安装后的界面,如图1 出现vulnerable字样,发现了shellshock漏洞,如图2 实验部分 2019/11/27 10:26:48 ...
- printf 参数检查 __attribute__((format(printf, 1, 2)))
With GCC, I can specify __attribute__((format(printf, 1, 2))) , telling the compiler that this funct ...
- 基于Apache+Tomcat实现负载均衡
1.基于Apache和tomcat实现负载均衡 准备三个虚拟机一个安装Apache两个安装Tomcat 关闭防火墙 systemctl stop firewalld Iptabled -F Seten ...
- 解决Idea配置文件不显示中文的问题
1.首先我们的IDEA文件编码一般都修改为utf-8(setting-->file encodings--->Global Encoding 和 Project Encoding 都设置为 ...
- java 之 学习过程中遇到的大佬博客
大佬1号:zejian 博客:https://blog.csdn.net/javazejian
- 20060518: Alert!
Alert Received, Shrink My Blog! 转载于:https://www.cnblogs.com/yidinghe/archive/2006/05/18/403089.html
- Nakamori Akina
听过中森明菜的歌以后,一直想写点什么.恰好前段时间看过她的一个访谈https://b23.tv/av13810011,节目里已经39岁左右的她看着已经有些衰老,但是那份属于她的天真却保持的很好. 节目 ...
- String(字符串) 比较大小 如果有A+B>B+A 则A>B
题目引入: 给定N个整数,那任意顺序排列连成一个数,得到的最大的数是多少? 分析:贪心,字典序排序,都不对大小比较也不对,今天我跟别人想了很久绞尽脑汁,各种模拟都失败了.最后才发现对于俩个数a=313 ...
- POJ 2230 Watchcow 欧拉回路的DFS解法(模板题)
Watchcow Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 9974 Accepted: 4307 Special Judg ...