【gogogo專欄】指針

go語言指針

  • 為什么需要指針
  • 指針使用實例
    • 值傳遞
    • 地址傳遞
    • 多級指針

為什么需要指針

作為一個大學劃水,畢業一直寫java的程序員來說,多多少少對于指針有點陌生,由于近期需要轉go,正好學到指針這里,就來探究下指針的使用場景和用法吧。

首先我們來看下以下這個簡單的例子,主方法通過形參將a傳遞進方法changeValue,然后這個方法將值改變了,那么主方法得到的值是否會改變呢?

import "fmt"/**
指針專題
*/func changeValue(p int) {p = 10
}func main() {var a = 1changeValue(a)fmt.Println("a = ", a)
}

運行后我們發現打印的a的值為1,a并沒有因為changeValue這個方法而改變。
究其原因是因為我們調用方法的時候是通過值傳遞的,而非地址傳遞,它的模型如下:
在這里插入圖片描述
因為兩個值存在于不同的地址中,所以值沒有改變,為了使上述方法能讓值得到修改,我們需要通過指針傳入地址來讓修改的變量值在當前地址中進行修改。

package mainimport "fmt"/**
指針專題
*/func changeValue(p *int) {*p = 10
}func main() {var a = 1changeValue(&a)fmt.Println("a = ", a)
}

因此使用指針過后,修改的為地址的值
在這里插入圖片描述

指針使用實例

值傳遞

func swap(a int, b int) {var temp inttemp = aa = bb = temp
}func main() {var a = 10var b = 20swap(a, b)fmt.Println("a=", a, "b=", b)
}

最終a=10 b=20,值并沒有改變

地址傳遞

func swap(pa *int, pb *int) {var temp inttemp = *pa*pa = *pb*pb = temp
}func main() {var a = 10var b = 20swap(&a, &b)fmt.Println("a=", a, "b=", b)
}

最終a=20 b=10,通過地址傳遞改變了原來的值

多級指針

指向指針的指針稱為多級指針

func main() {a := 0//一級指針var p *intp = &afmt.Println(&a)fmt.Println(p)//二級指針var pp **intpp = &pfmt.Println(&p)fmt.Println(pp)
}

打印結果如下

0x1400000e078
0x1400000e078
0x14000046020
0x14000046020

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36374.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36374.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36374.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ThreadLocal詳解

ThreadLocal詳解 一、故事背景二、知識點主要構成1、什么是ThreadLocal?2、ThreadLocal的基本使用內存泄漏問題引用類型:強引用:軟引用弱引用虛引用 ThreadLocal內存泄漏原因 三、總結提升 一、故事背景 最近在學習并發編程相關內容&#xf…

pycharm 安裝庫

這是另一種方式。 搜索到的安裝庫的方式多數是:在桌面上winR鍵運行終端,輸入命令,安裝不了,發現安裝不了。 1、打開pycharm; 2、軟件下部的Terminal終端(需要運行一個代碼才能出現,任何代碼都可)&#xf…

Es、kibana安裝教程-ES(二)

上篇文章介紹了ES負責數據存儲,計算和搜索,他與傳統數據庫不同,是基于倒排索引來解決問題的。Kibana是es可視化工具。 分布式搜索ElasticSearch-ES(一) 一、ElasticSearch安裝 官網下載地址:https://www…

[C語言] 指針

1. 指針是什么 2. 指針和指針類型 3. 野指針 4. 指針運算 5. 指針和數組 6. 二級指針 7. 指針數組 目錄 1. 指針是什么? 2. 指針和指針類型 2.1 指針-整數 2.2 指針的解引用 3. 野指針 3.1 野指針成因 3.2 如何規避野指針 4. 指針運算 4.1 指針…

不用技術代碼,分班查詢系統怎么做?

暑假即將結束,新學期開始將面臨分班信息公布的工作!對于分班信息公布,涉及到學生的個人信息,包括姓名、學號、班級等。在發布這些信息時,必須確保數據的保密性,防止未經授權的人員獲取到學生的個人信息。因…

對字符串中所有單詞進行倒排-C語言/Java

描述 輸入一個字符串,輸出字符串中單詞的倒序。 要求 構成單詞的字符只有26個大寫或小寫英文字母。非構成單詞的字符均視為單詞間隔符;倒排后的單詞間隔符以一個空格表示;如果原字符串中相鄰單詞間有多個間隔符時,倒排轉換后也只…

docker的服務/容器缺少vim問題

背景/問題: docker的服務/容器缺少vim問題 bash: vim: command not found 在docker的mysql服務中安裝Vim 1、執行apt-get update root6d8d17e320a0:/# apt-get update問題:文件下載失敗 Err:1 http://security.debian.org/debian-security buster/updates InRe…

【Linux】程序地址空間

程序地址空間 首先引入地址空間的作用什么是地址空間為什么要有地址空間 首先引入地址空間的作用 1 #include <stdio.h>2 #include <unistd.h>3 #include <stdlib.h>4 int g_val 100;6 int main()7 {8 pid_t id fork();9 if(id 0)10 {11 int cn…

自動方向識別式 LSF型電平轉換芯片

大家好&#xff0c;這里是大話硬件。 今天這篇文章想分享一下電平轉換芯片相關的內容。 其實在之前的文章分享過一篇關于電平轉換芯片的相關內容&#xff0c;具體可以看鏈接《高速電路邏輯電平轉換設計》。當時這篇文章也是分析的電平轉換芯片&#xff0c;不過那時候更多的是…

矩陣的轉置

題目&#xff1a; 給你一個二維整數數組 matrix&#xff0c; 返回 matrix 的 轉置矩陣 。 示例 1&#xff1a; 輸入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 輸出&#xff1a;[[1,4,7],[2,5,8],[3,6,9]]class Solution(object):def transpose(self, matrix):"&q…

JMeter 的并發設置教程

JMeter 是一個功能強大的性能測試工具&#xff0c;可以模擬許多用戶同時訪問應用程序的情況。在使用 JMeter 進行性能測試時&#xff0c;設置并發是非常重要的。本文將介紹如何在 JMeter 中設置并發和查看報告。 設置并發 并發是在線程組下的線程屬性中設置的。 線程數&#…

3.解構賦值

解構賦值是一種快速為變量賦值的簡潔語法&#xff0c;本質上仍然是為變量賦值。 3.1數組解構 數組解構是 將數組的單元值快速批量賦值給一系列變量 的簡潔語法 1.基本語法: &#xff08;1&#xff09;賦值運算符左側的[ ]用于批量聲明變量&#xff0c;右側數組的單元值將被賦…

前后端分離------后端創建筆記(04)前后端對接

本文章轉載于【SpringBootVue】全網最簡單但實用的前后端分離項目實戰筆記 - 前端_大菜007的博客-CSDN博客 僅用于學習和討論&#xff0c;如有侵權請聯系 源碼&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…

【JavaEE進階】Bean 作用域和生命周期

文章目錄 一. 關于Bean作用域的實例1. lombok2. 實例代碼 二. 作用域定義1. Bean的六種作用域2. 設置作用域 三. Spring 執行流程和 Bean 的生命周期1. Spring 執行流程2. Bean生命周期 一. 關于Bean作用域的實例 注意在此例子中需要用到lombok 1. lombok lombok是什么? Lo…

【C#】判斷打印機共享狀態

打印機共享狀態 /// <summary>/// 打印機共享狀態/// </summary>public enum PrinterShareState{/// <summary>/// 無打印機/// </summary>None -1,/// <summary>/// 未共享/// </summary>NotShare 0,/// <summary>/// 已共享/// …

soap通信2

首先&#xff0c;定義一個XSD&#xff08;XML Schema Definition&#xff09;來描述你的數據結構。在你的Maven項目的src/main/resources目錄下&#xff0c;創建一個名為schemas的文件夾&#xff0c;并在其中創建一個名為scriptService.xsd的文件&#xff0c;內容如下&#xff…

【kubernetes】調度約束

目錄 調度約束 Pod 啟動典型創建過程如下 調度過程 指定調度節點 查看詳細事件&#xff08;發現未經過 scheduler 調度分配&#xff09; 獲取標簽幫助 需要獲取 node 上的 NAME 名稱 給對應的 node 設置標簽分別為 ggls 和 gglm 查看標簽 修改成 nodeSelector 調度方…

vue學習筆記

1.官網 v2官網 https://v2.cn.vuejs.org/ v3官網 https://cn.vuejs.org/ 2.vue引入 在線引入 <script src"https://cdn.jsdelivr.net/npm/vue2.7.14/dist/vue.js"></script> 下載引入(下載鏈接) https://v2.cn.vuejs.org/js/vue.js 3.初始化渲…

Redis——通用命令介紹

Redis官方文檔 redis官方文檔 核心命令 set 將key和value存儲到Redis中&#xff0c;key和value都是字符串 set key valueRedis中不區分大小寫&#xff0c;字符串類型也不需要添加單引號或者雙引號 get 根據key讀取value&#xff0c;如果當前key不存在&#xff0c;則返回…

Offset Explorer

Offset Explorer 簡介下載安裝 簡介 Offset Explorer&#xff08;以前稱為Kafka Tool&#xff09;是一個用于管理和使Apache Kafka 集群的GUI應用程序。它提供了一個直觀的UI&#xff0c;允許人們快速查看Kafka集群中的對象以及存儲在集群主題中的消息。它包含面向開發人員和管…