指针是c、c++和go这些需要动态分配内存等功能的语言用到的,笔者在刚开始使用的时候,经常混淆指针的定义和使用,下面总结一下。
c/c++的写法
void pointDemo() {
int normalVar = 1; //定义普通变量
int *pointVar1 = &normalVar; //定义指针变量
int *pointVar2 = 2;
printf("normalVar=%d\n", normalVar);
printf("pointVar1=%d\n", *pointVar1); //获得指针变量的值
printf("pointVar2=%d\n", pointVar2);
}
go的写法
func pointDemo() {
nornalVar := 1 //定义普通变量
pointVar1 := &nornalVar //将变量的地址赋值给指针变量
var pointVar2 *int //另一种写法
pointVar2 = &nornalVar
fmt.Println("nornalVar=", nornalVar)
fmt.Println("pointVar1=", *pointVar1) //打印指针变量的值
fmt.Println("pointVar2=", pointVar2) //打印指针指向的地址
}
总结对比:
1. java和go中不能定义指针;
2. *表示定义指针变量,&表示取值的地址,所以一般等式左边是*,右边是&,即*表示定义,&表示获得;
3. 在何种情况下使用指针?一般是在需要更改变量的值的情况下需要用到指针;