go配合cheatengine查看变量内存地址值

本文通过示例代码展示了Go语言中基础数据类型(如int、float、bool和string)作为值类型,其变量存储的是值本身而不是内存地址。数组虽然看似存储连续内存地址,但实际上也是值类型。而指针类型则是引用类型,存储的是变量的内存地址。通过 CheatEngine 检查内存,可以验证这些结论。
摘要由CSDN通过智能技术生成

go程序里的值类型与饮用类型:

基础数据类型值类型判断

package main
import (
"os"
"fmt"
"time"
)
func main() {
var a int = 16;
fmt.Println(os.Getppid()); //进程。方便cheatengine选择进程id查看
fmt.Println(a);
time.Sleep(30time.Second); //等待cheatengine操作查看内存值
fmt.Println(&a);
a = 31;
fmt.Println(a);
time.Sleep(30
time.Second);
a=32;
fmt.Println(a);
time.Sleep(30time.Second);
a = 57;
fmt.Println(a);
time.Sleep(30
time.Second);
time.Sleep(60000*time.Second);
}
通过ce可以看到直接存的是值,并不是内存地址,可以看到得出结论,int、float、bool 和 string 这些基本类型都属于值类型,bool值true是1 ,false是0.

数组类型值类型判断:

package main
import (
"fmt"

"time"

)
func main(){
var a = [5]int{1,2,3,4,5};
fmt.Printf("%p",&a);//和&a[0]的直相同 ,说明打印数组的地址就是打印的数组的第一个元素的直,说明go里面的数组类型并不是饮用类型而是值类型
fmt.Println("\n");
fmt.Println(&a[0]);//内存的直是1
fmt.Println(&a[1]);//内存的直是2
fmt.Println(&a[2]);//内存的直是3
fmt.Println(&a[3]);//内存的直是4
fmt.Println(&a[4]);//内存的直是5
time.Sleep(60000*time.Second);
}

指针类型引用类型判断:

package main

import (
"fmt"
"time"
"os"
)

/**
这个方法应该展示的是指针所指向的是一个地址,该地址存的是具体的实际的值
*/
func main() {
var hello int = 3;
var ip *int = &hello;
// 打印ip的内存地址的值 就是hello变量实际值所在的内存地址 , ip的值是地址,是变量hello的地址。
fmt.Println(&hello)
fmt.Println(ip == &hello) //我们可以用cheatengine去查看,是否是一致的

//打印出当前进程 方便ce定位
fmt.Println(os.Getpid());
time.Sleep(600*time.Second); //阻塞住进程退出

}
 

 

证明指针变量存储的是地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值