- 引用 就是变量的另一名字,不在内存中单独存储
指针 存储变量的地址,可以改变指向
int main() {int a = 10;// 变量int * pa = &a; // 指针int & b = a; // 引用printf("a: %d\n", a);// a: 10printf("*pa: %d\n", *pa);// *pa: 10printf("b: %d\n", b);// b: 10*pa = 20;printf("a: %d\n", a);// a: 20printf("*pa: %d\n", *pa);// *pa: 20printf("b: %d\n", b);// b: 20b = 30;printf("a: %d\n", a);// a: 30printf("*pa: %d\n", *pa);// *pa: 30printf("b: %d\n", b);// b: 30a = 40;printf("a: %d\n", a);// a: 40printf("*pa: %d\n", *pa);// *pa: 40printf("b: %d\n", b);// b: 40return 0;}

golang函数是值传递(拷贝副本,内存地址不同),没有引用传递。map,chan返回指针类型;slice和map、chan都不太一样的,一样的是,它也是引用类型,它也可以在函数中修改对应的内容。slice是一种结构体+元素指针的混合类型,通过元素array(Data)的指针,可以达到修改slice里存储元素的目的。 ```go type SliceHeader struct { Data uintptr Len int Cap int }
type slice struct { array unsafe.Pointer len int cap int } ``` 内置函数 new 计算类型大小,为其分配零值内存,返回指针。而 make 会被编译器翻译 成具体的创建函数,由其分配内存和初始化成员结构,返回对象而非指针。
make 用来创建map、slice、channel
new 用来创建值类型
