目录ios
前言c++
正文数组
什么是指针?markdown
指针怎么用?学习
明显差别编码
结论spa
不止C++有指针,Golang也有指针呦!两者有哪些区别呢?今天就来看一看。指针
什么是指针? 指针是用来指向任何一个变量的内存地址的类型变量,它所指向的变量的内存地址在 32 和 64 位机器上分别占用 4 或者 8 个字节,占用字节的大小与所指向的值的大小无关。code
Golangorm
下面咱们经过一个例子,来了解在Golang语言中是如何获取变量的地址的。
实例代码:
package main
import (
"fmt"
)
func main() {
var a int = 1 // 一个整型变量a
var b string = "abcdefg" // 一个字符串变量b
fmt.Printf("%p %p", &a, &b) // 分别输出a和b的地址
}
复制代码
上述代码的运行结果:
0xc00007e020 0xc00005e1e0
值得注意的是,Golang中在声明变量时,是可使用汉字的(这一点确实比C++要秀)。
好比,下面的编码形式也是能够编译经过而且正确运行的,习惯了C++开发的朋友要是看到,确定强迫症都要犯了。。。
“个人意大利炮呢?”
package main
import (
"fmt"
)
func main() {
var 一个整型变量 int = 1
var 一个字符串变量 string = "abcdefg"
fmt.Printf("%p %p", &一个整型变量, &一个字符串变量)
}
复制代码
上述代码的运行结果:
0xc000016060 0xc000010210
C++
下面咱们经过一个例子来了解C++语言中是如何获取变量的地址的。
实例代码:
#include <iostream>
using namespace std;
int main() {
int a = 1; // 一个整型变量a
string b = "abcdefg"; // 一个字符串变量b
cout<< &a <<" "<< &b <<endl; // 分别输出a和b的地址
return 0;
}
复制代码
上述代码的运行结果:
0x7ffea42614bc 0x7ffea42614c0
说真的,对比上面的两部分代码,感受C++和Golang仍是差不太多的,可能更多的仍是语法上的差别。
指针能够用来获取变量的地址,同时也能够用来获取变量对应的值。正确使用指针不管是在Golang中仍是C++中,都是一件很是有趣且高效的事情。想要成为一名优秀的Golang开发工程师或者C++开发工程师,学习好指针的使用都是很是有必要的。
Golang
下面咱们经过一个例子,来了解Golang中的指针是如何获取变量地址以及它的值的。
实例代码:
package main
import (
"fmt"
)
func main() {
// 准备一个字符串类型
var a = "Hello, world"
// 获取字符串的地址, ptr类型为*string
ptr := &a
// 打印ptr的类型
fmt.Printf("ptr type: %T\n", ptr)
// 打印ptr的地址
fmt.Printf("address: %p\n", ptr)
// 对指针进行取值
value := *ptr
// 打印value的类型
fmt.Printf("value type: %T\n", value)
// 打印value的值
fmt.Printf("value: %s\n", value)
}
复制代码
上述代码的运行结果:
ptr type: *string
address: 0xc000010210
value type: string
value: Hello, world
经过代码的执行结果,咱们能够知道ptr是一个string字符串类型的指针,它的地址是0xc000010210,它指向的值是 Hello, world。
C++
相同逻辑的一段C++代码:
#include <iostream>
using namespace std;
int main() {
// 准备一个字符串类型
string a = "Hello, world";
// 获取字符串的地址, ptr类型为*string
string* ptr = &a;
// 打印ptr的地址
cout<<"address: "<< ptr <<endl;
// 对指针进行取值
string value = *ptr;
// 打印value的值
cout<<"value: " << value <<endl;
return 0;
}
复制代码
上述代码的运行结果:
address: 0x7ffe0b9c8860
value: Hello, world
总体感受,Golang和C++的差异不大。
经过上边的对比分析,咱们能够发现Golang和C++不少地方都很类似。那么,它们两者之间有没有明显的区别呢?
答案是有的!
C++语言中能够直接对指针作算术运算(+、-、++、--),可是Golang中是不行的。
接下来看两段代码实例:
Golang
package main
import (
"fmt"
)
func main() {
// 准备一个字符串类型
var a = "Hello, world"
// 获取字符串的地址, ptr类型为*string
ptr := &a
// 打印++ptr的地址
fmt.Printf("address: %p\n", ++ptr)
// 打印ptr+1的地址
fmt.Printf("address: %p\n", ptr+1)
}
复制代码
上述代码的第16行和第19行都会报错,可是相同的操做在C++中都是能够的。
C++
相同逻辑的一段C++代码:
#include <iostream>
using namespace std;
int main() {
// 准备一个字符串类型
string a = "Hello, world";
// 获取字符串的地址, ptr类型为*string
string* ptr = &a;
// 打印++ptr的地址
cout<<"address1: "<< ptr+1 <<endl;
// 打印ptr+1的地址
cout<<"address2: "<< ++ptr <<endl;
return 0;
}
复制代码
上述代码的运行结果:
address1: 0x7fffe8bc9b80
address2: 0x7fffe8bc9b80
经过对比结果,咱们能够看出Golang中不支持对指针进行算术运算,而这一点在C++中没有限制。
今天只是很是基础的介绍指针在Golang和C++中的使用方法,在实际开发中会涉及不少其余类型的指针变量,好比数组指针、指针数组、对象指针等。这篇文章算是抛砖引玉吧,获悉更多C++和Golang内容,欢迎评论关注!公众号“玩转音视频”,分享超实用的音视频技能!