首页 > 其他分享 >golang 指针传递和值传递

golang 指针传递和值传递

时间:2025-01-18 08:59:53浏览次数:1  
标签:golang s3 s2 fmt MyStruct Value 传递 指针

golang 指针传递和值传递



package main

import "fmt"

type MyStruct struct {
	Value string
}

// 值传递
// ModifyStruct takes a MyStruct by value and tries to modify it.
func ModifyStruct(s MyStruct) {
	s.Value = "Modified"
}

// 指针传递
// ModifyStructPtr takes a pointer to MyStruct and modifies the original.
func ModifyStructPtr(s *MyStruct) {
	s.Value = "Modified"
}

// 值传递
func ModifyStructPtrV2(s MyStruct) {
	s.Value = "Modified"
}

func main() {
	// Using value passing
	s1 := MyStruct{Value: "Original"}
	ModifyStruct(s1)
	fmt.Println(s1.Value) // Output will be "Original" because s1 was not modified.

	// Using pointer passing
	s2 := &MyStruct{Value: "Original"}
	ModifyStructPtr(s2)
	fmt.Println((*s2).Value) // Output will be "Modified" because s2 was modified.

	s3 := &MyStruct{Value: "Original"}
	ModifyStructPtrV2(*s3)
	fmt.Println((*s3).Value) // Output will be "Orginal" because s3 was not modified.

}


标签:golang,s3,s2,fmt,MyStruct,Value,传递,指针
From: https://www.cnblogs.com/zhuoss/p/18676468

相关文章

  • 超高频算法——双指针思想的领悟 python
    目录问题引入1解决方案牛刀小试问题引入2解决方案举一反三实战演练(双指针)问题引入3Whatis滑动窗口关键要素实战演练(滑动窗口)总结问题引入1给你一个数组(按非递减顺序排列),假定为【2,4,5,6,7,9】请你在数组中找到两个数满足:相加等于10,返回它们的值。你是一个不知道双......
  • lanqiaoOJ 3333:肖恩的排序 ← 双指针+排序(从大到小)
    【题目来源】https://www.lanqiao.cn/problems/3333/learning/【题目描述】肖恩提出了一种新的排序方法。该排序方法需要一个标准数组B和一个待排序数组A。在确保对于所有位置i都有A[i]>B[i]的前提下,肖恩可以自由选择A数组的排序结果。请计算按照这种排序方法,待排序......
  • 双指针+回文数组
    https://codeforces.com/problemset/problem/1610/B#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'usingll=longlong;usingpii=pair<int,int>;constdoublePI=acos(-1);constintN=2e5+10;constintmod=1e9......
  • C语言数据结构编程练习-用指针创建顺序表,进行创销和增删改查操作
     使用多文件进行编程main.c文件#include"02.h"intmain(){ fn2(); return0;} 02.h 头文件#pragmaonce#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<memory.h>#defineMAX_NUMBER100typedefi......
  • 使用 Golang 编译 Linux 可运行文件
    Golang(或Go)是一种开源编程语言,因其简单、高效、并发编程支持而备受欢迎。本文将详细介绍如何使用Golang编译生成可以在Linux上运行的可执行文件。一、安装Golang1.1下载Golang从Golang官方网站下载适合你操作系统的安装包:Golang下载页面1.2安装Golang在Ubuntu......
  • Linux驱动开发:处理空指针错误,ERR_PTR、IS_ERR、PTR_ERR用法
    免责声明:本文内容摘自《Linux设备驱动开发》一书,作者为JohnMadieu,译者为袁鹏飞、刘寿永,由人民邮电出版社出版。本文仅为分享知识和讨论之用,非商业用途。书籍版权归原作者及出版社所有。本人及本博客不对因使用或误用本文内容而产生的任何后果负责。请读者尊重版权,合理使用内容。......
  • Rust程序Vec中存储的一般都是Box动态指针吗?
    Rust程序Vec中存储的一般都是Box动态指针吗?UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU在Rust中,Vec<T>不是专门存储Box<T>或其他动态指针,而是存储类型T的值。具体来说,Vec<T>会按照值的类型T来管理数据,它通常使用堆分配内存来存储数据(对于较大的数据或当数据需要动态增长时......
  • Golang学习笔记_24——泛型
    Golang学习笔记_21——ReaderGolang学习笔记_22——Reader示例Golang学习笔记_23——error补充文章目录泛型1.泛型中的类型参数1.1类型参数声明1.2类型参数的约束1.3类型参数的实例化2.泛型函数3.泛型类型4.泛型接口源码泛型Go语言从1.18版本开始引入......
  • 【C语言】_指针面试题
    目录1.示例12.示例23.示例34.示例45.示例56.示例67.示例71.示例1#include<stdio.h>intmain(){ inta[5]={1,2,3,4,5}; int*ptr=(int*)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); return0;}运行结果如下:分析:(1)a=&a[0],a+......
  • 双指针习题:Binary Deque
    14.BinaryDeque题面翻译BinaryDeque-洛谷|计算机科学教育新生态(luogu.com.cn)有多组数据。每组数据给出\(n\)个数,每个数为\(0\)或\(1\)。你可以选择从两边删数,求至少删几个数才可以使剩下的数总和为\(s\)。如果不能达到\(s\),则输出\(-1\)。题目描述Sla......